PDA

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