Pagina 1 di 1
Le stranezze degli script...
Inviato: lun 26 dic , 2005 2:54 am
da andrewp
E' bello imbattersi sempre in nuove improbabilità informatiche...per quale motivo uno script in bash, se lanciato a mano termina tutti i compiti alla perfezione...e se schedulato in crontab si ferma a metà?!
Inviato: lun 02 gen , 2006 12:11 pm
da jbg70
Sicuro di aver indicato il path completo dei comandi, e non solo il comando?
Saluti.
Inviato: lun 02 gen , 2006 4:37 pm
da andrewp
Cosa intendi per path completo dei comandi?All'interno dello script?!
Puoi farmi un esempio...dal momento che lanciandolo a mano, utilizzando la stessa stringa di crontab, porta a termine tutti i suoi compiti.
Inviato: lun 02 gen , 2006 4:56 pm
da jbg70
SithDrew ha scritto:Cosa intendi per path completo dei comandi?All'interno dello script?!
per fare un esempio 'fesso fesso', se devi eseguire un comando come
diventa:
In questo modo indichi il percorso completo del file da eseguire, perchè il comando echo si trova nella directory /bin/
Un comando in crontab può essere eseguito in una shell la cui variabile path di ambiente può non contenere il percorso del file che vuoi eseguire, e quindi il sistema operativo semplicemente non lo trova...
Se per l'utente root, /bin è un percorso già impostato nella variabile path, lo stesso percorso può non essere definito per l'untente con il quale il comando in crontab viene fatto eseguire.
Se posti lo script ci si da uno sgaurdo!
Saluti.
Inviato: lun 02 gen , 2006 5:18 pm
da sum][one
anche io ho avuto lo stesso problema .. ed alla fine ho fatto degli script da eseguire in crontab con i percorsi completi invece di lanciare in una riga crontab i vari comandi (ed i percorsi anche li erano completi.. ma non andava la meta' delle volte)... so che tutto questa mia risposta e' inutile..
inotre potresti magari pipeare l'output al log.. magari ti dice perche' non va.. boh..
ciao!
Inviato: lun 02 gen , 2006 5:52 pm
da jbg70
L'errore più comune nei crontab è quello di omettere i percorsi, o eseguire comandi per i quali l'user che li esegue non ha i privilegi.
Se devo eseguire un comando come cat prova.txt, in crontab il comando diventa:
Codice: Seleziona tutto
/bin/cat /$directory_dove_si_trova_prova.txt/prova.txt
Qualsiasi file o directory si voglia specificare come opzione va indicata con il percorso assoluto. Un altro esempio tipico è per mrtg per chi non vuole usare l'opzione daemon, per cui il comando diventa:
oppure per cacti:
Codice: Seleziona tutto
*/5 * * * * cactiuser /usr/bin/php /var/www/localhost/htdocs/cacti/poller.php > /dev/null 2>&1
Saluti.
Inviato: lun 02 gen , 2006 10:39 pm
da andrewp
Questa prima parte viene eseguita tranquillamente anche da crontab:
Codice: Seleziona tutto
cd /var/log/squid
cp access.log.1.gz /var/spool/squid/bcklog/
cp cache.log.1.gz /var/spool/squid/bcklog/
cp store.log.1.gz /var/spool/squid/bcklog/
cd /var/spool/squid/bcklog/
mv access.log.1.gz access.log.1.gz.$(stat access.log.1.gz --format=%y |cut -c 1-10)
mv cache.log.1.gz cache.log.1.gz.$(stat cache.log.1.gz --format=%y |cut -c 1-10)
mv store.log.1.gz store.log.1.gz.$(stat store.log.1.gz --format=%y |cut -c 1-10)
find * -ctime +7 -exec rm {} \;
Questa parte invece...non ne vuole sapere, se non manualmente, sono sicuro che l'utenza di crontab sia root in quanto lo script riesce a partire ed a eseguire operazioni in cartelle e file con permessi 700.
Codice: Seleziona tutto
cd /var/log/squid
sleep 1
filenamea="access.log.1.gz"
filenameb="cache.log.1.gz"
filenamec="store.log.1.gz"
hostname="x"
username="xx"
password="y"
ftp -un $hostname <<EOF
quote USER $username
quote PASS $password
binary
cd cartella
put $filenamea $filenamea.A
put $filenameb $filenameb.B
put $filenamec $filenamec.C
quit
EOF
Something strange?!
Inviato: mar 03 gen , 2006 12:48 am
da jbg70
Se la prima parte non ti da problemi passiamo alla seconda, ed anche se ho tolto -u all'ftp perchè nel mio client ftp non è previsto lo switch -u, se l'user che esegue lo script è root, funziona anche senza full path, ma per essere precisi, l'ho modificato così:
Codice: Seleziona tutto
/bin/sleep 1
cd /var/log/squid
filenamea="access.log.1.gz"
filenameb="cache.log.1.gz"
filenamec="store.log.1.gz"
hostname="h"
username="x"
password="y"
/usr/bin/ftp -n $hostname <<EOF
quote USER $username
quote PASS $password
binary
cd cartella
put $filenamea $filenamea.A
put $filenameb $filenameb.B
put $filenamec $filenamec.C
quit
EOF
Ad ogni modo lo script risulta corretto, e il problema potrebbe essere la directory 'cartella'.
Ha i permessi di scrittura per l'user x? Non è che quando l'hai creata, l'hai creata come root, e l'user x non può scriverci dentro?
Inoltre se i file esistono già in quella directory, può capitare che non puoi sovrascriverli.
Di solito cron manda una mail a root alla fine di ogni script che ha generato un output, oppure puoi dirgli di farlo. Ti sarebbe utile per capire dove lo script si ferma. In /etc/crontab (se nella tua distro esiste un crontab) puoi inserire quanto segue:
Codice: Seleziona tutto
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
Saluti.
Inviato: mar 03 gen , 2006 5:02 pm
da andrewp
jbg70 ha scritto:Ad ogni modo lo script risulta corretto, e il problema potrebbe essere la directory 'cartella'.
Ha i permessi di scrittura per l'user x? Non è che quando l'hai creata, l'hai creata come root, e l'user x non può scriverci dentro?
Inoltre se i file esistono già in quella directory, può capitare che non puoi sovrascriverli.
I permessi e l'owner della cartella sono corretti, i file nella cartella di destinazione non esistono.
Ho modificato lo script inserendo i full path...vediamo che succede domani.
Inviato: dom 08 gen , 2006 10:26 am
da andrewp
Dopo un po di troubleshooting....ecco il problema:
jbg70 ha scritto:anche se ho tolto -u all'ftp perchè nel mio client ftp non è previsto lo switch -u
nel mio client era previsto lo switch -u....manualmente funzionava mentre schedulato in crontab restituiva un errore!Tolto il -u lo script viaggia che è una meraviglia.
Bye.
Inviato: dom 08 gen , 2006 11:43 am
da jbg70
Solo per curiosità.... cosa prevedeva il -u ?
Saluti.
Inviato: dom 08 gen , 2006 3:34 pm
da andrewp
Dal man dell' ftp:
Codice: Seleziona tutto
-u Restrains ftp from attempting ‘‘auto-authentication’’ upon initial connection. If auto-authentication is enabled, ftp
attempts to authenticate to the FTP server by sending the AUTH
command, using whichever authentication types are locally supported. Once an authentication type is accepted, an authentica-
tion protocol will proceed by issuing ADAT commands. This
option also disables auto-login.