View Full Version : problemino con script e cron
IonutMarius
26-09-2010, 18:08
so. centos 5.5
ho creato un piccolo script che mi restarta il servizio named se è crashato
lo vorrei mettere sotto cron cosi controlla ogni tot tempo
lo scirpt è il seguente e si trova in /myscripts/named_auto_restart.sh permessi 777 owner root
codice:
#! /bin/sh
count=`service named status | egrep -w "stopped|dead" | wc -l `
if [ $count -ne 0 ]
then
service named restart
fi
se da console vado in /myscripts e digito ./named_auto_restart.sh
me lo restarta se è chiuso o dead. funziona come vorrei che funzionasse
se lo metto sotto il cron di root ma quando arriva il momento dell'esecuzione ricevo l'email con questo errore:
codice:
/myscripts/named_auto_restart.sh: line 3: service: command not found
:muro:
cosa sbaglio?
grazie mille
ps. ho già controllato che il vai a capo sia fatto solo con lf e con cr-lf
eclissi83
27-09-2010, 01:46
so. centos 5.5
ho creato un piccolo script che mi restarta il servizio named se è crashato
lo vorrei mettere sotto cron cosi controlla ogni tot tempo
lo scirpt è il seguente e si trova in /myscripts/named_auto_restart.sh permessi 777 owner root
codice:
#! /bin/sh
count=`service named status | egrep -w "stopped|dead" | wc -l `
if [ $count -ne 0 ]
then
service named restart
fi
se da console vado in /myscripts e digito ./named_auto_restart.sh
me lo restarta se è chiuso o dead. funziona come vorrei che funzionasse
se lo metto sotto il cron di root ma quando arriva il momento dell'esecuzione ricevo l'email con questo errore:
codice:
/myscripts/named_auto_restart.sh: line 3: service: command not found
:muro:
cosa sbaglio?
grazie mille
ps. ho già controllato che il vai a capo sia fatto solo con lf e con cr-lf
uhm... come hai aggiunto la riga nel crontab?
inoltre, prova a mettere il path completo di service, e' come se non trovasse il path completo..
ah, metti /bin/bash e non /bin/sh...
ciao
IonutMarius
27-09-2010, 07:58
il crontab l'ho aggiunto con plesk ogni */3 minuti
ho fatto con il percorso completo e ora funziona
#! /bin/sh
count=`/sbin/service named status | egrep -w "stopped|dead" | wc -l `
if [ $count -ne 0 ]
then
/sbin/service named restart
fi
grazie mille...
ma mi domando, perché devo usare il path completo se quello dovrebbe essere eseguito dentro una shell?
se funziona quando lo faccio io nella shell dovrebbe funzionare anche quando lo fa cron no?
a me sembra logico cosi.. (ma non entrerò mai completamente nella logica di linux XD)
eclissi83
27-09-2010, 10:51
il crontab l'ho aggiunto con plesk ogni */3 minuti
ho fatto con il percorso completo e ora funziona
perfetto!
grazie mille...
di nulla, figurati :)
ma mi domando, perché devo usare il path completo se quello dovrebbe essere eseguito dentro una shell?
se funziona quando lo faccio io nella shell dovrebbe funzionare anche quando lo fa cron no?
a me sembra logico cosi.. (ma non entrerò mai completamente nella logica di linux XD)
hehe allora, provo a darti una spiegazione che potrebbe non essere l'unica a riguardo: quando tu esegui lo script "a mano" lo esegui da una shell che e' "bash" al 99% dei casi, che ha caratteristiche diverse da "sh" invocata dal tuo script (la prima riga che vedi).
prova a rimettere lo script com'era prima e a cambiare solo la prima riga sostituendo sh con bash..
ciao
IonutMarius
27-09-2010, 14:42
proverò anche ciò
come capisco se la shell che uso è sh o bash?
eclissi83
27-09-2010, 15:13
proverò anche ciò
come capisco se la shell che uso è sh o bash?
cosi':
bisco@eva-01 ~ $ echo $SHELL
/bin/bash
bisco@eva-01 ~ $
IonutMarius
27-09-2010, 21:18
eccomi
allora si la shell mi da anche a me bash
[root@uotf ~]# echo $SHELL
/bin/bash
ho fatto un nuovo script cosi (aaa.bash):
#! /bin/bash
dns_serv=`service named status | egrep -w "stopped|dead" | wc -l `
if [ $dns_serv -ne 0 ]
then
service named restart
echo "$(date):Started named" >>/myscripts/servstatus.log
fi
ma non ne vuole sapere proprio:
ecco il risultato:
/myscripts/aaa.bash: line 3: service: command not found
boh chissà
usero quello completo...
Gimli[2BV!2B]
29-09-2010, 20:01
Ad occhio direi che devi specificare il percorso completo del comando service.
Per trovarlo immediatamente:which service
Naturalmente questo vale per ogni comando che non si trovi nel $PATH ristretto impostato di default in Cron (impostazione saggia che ha un discreto impatto sulla sicurezza del sistema).
IonutMarius
29-09-2010, 20:02
si il problema è stato risolto, si discuteva su un altra questione
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.