Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: sehy 05 Srpna 2014, 12:24:55
-
Zdravím,
mám problém s sh skriptem. Snažím se napsat skript který bude kontrolovat běžící službu. Když poběží ukončí se, když bude vypnutá zapne ji. Problém se v tom že když je služba vypnutá tak ji program spustí (služba se spouští cca 45 s) tak vyhodí chybu (myslím si že je to tím že se nestihne spustit). Jak docílím toho že skript počká na to až se služba spustí a nebude pokračovat v programu (skriptu)?
#!/bin/bash
SERVICE="core"
PSV=$(ps aux | grep -v "grep" | grep $SERVICE | wc -l)
if [ $PSV == "0" ];
then
# Vypnuta!
echo "$SERVICE vypnuta"
/etc/init.d/edvrserver restart
else
# Zapnuta
echo "$SERVICE zapnuta"
fi
unset SPHINXPID
unset SERVICE
exit 0
-
po spuštění pužij příkaz sleep 50. počká padesát sekund a pak pokračuje
-
protoze ten skript je celej naprosto spatne ;)
-
takhle ne použij smyčku...
-
takhle ne použij smyčku...
na co, */N * * * * /teh/script.sh v cronu je mnohem lepsi nez smycka ;) .. kdyz uz jsme u toho, tak spis at:
1) odstrani tu hruzu PSV=$(ps aux | grep -v "grep" | grep $SERVICE | wc -l)
2) at nepouziva VELKA pismena na sve promenne .. kua .. shared/systemove promenne jsou velkejma .. uz se to prosim lidi naucte a prestante tam busit ten UPPERCASE
3) At normalne cekuje pomoci /etc/init.d/foo status, jestli service bezi a nebo ne
-
ps aux | grep -v "grep" | grep $SERVICE | wc -l
if pgrep $SERVICE; then ....
by bylo elegantnější a pokud by to mělo prohledávat celý příkaz, ne jen jména procesů, pak pgrep -f. To jen pro info.
Jinak ale bude rozumnější co psal ntz, případně to celé předat upstartu, či systemd, které to umí hlídat samy.
Edit: smazal jsem poznámku, která ze mě dělala vola :)