Newsgroup: it.comp.os.linux.sys
Titolo: Script in cron

Salve a tutti. Ho un paio di script che cercano file .tar.gz in una
directory, li decomprimono e se la decompressione ha successo li
cancellano.
Se lancio il tutto a mano funzionano bene, ma se li metto in cron non
funzionano più!
Ho visto il log (si tratta di una Debian Sarge, e i log di cron li
mette in /var/log/syslog) e sembra tutto ok.
Qualcuno ha qualche suggerimento in merito?
Intanto vi allego gli script e il crontab.
Grazie per l'attenzione, ciao!
GePs
# cat /opt/scripts/seek.sh:
#!/bin/sh
find /some/path -name *.tar.gz -exec /opt/scripts/untar.sh {} \;
# cat /opt/scripts/untar.sh
#! /bin/sh
DIRNAME=$(dirname $1)
BASENAME=$(basename $1)
cd $DIRNAME
if ! tar xzvf $BASENAME; then
        exit 1
fi
rm -f $BASENAME
# crontab -l
00 04 * * * /opt/scripts/seek.sh

 Intanto vi allego gli script e il crontab.
<cut>
che visti così sembrano a posto.
Ciao
Ercole

 find /some/path -name *.tar.gz -exec /opt/scripts/untar.sh {} \;
non e' che cosi' e' un po meglio dei tue 2 script messi insieme:
find /some/path -name  *.tar.gz -exec tar -xvf '{}' -C `dirname '{}'` ';'
o cosi':
find /some/path -name  *.tar.gz -exec tar -xvf '{}' -C $(`dirname '{}') ';'
;)
onestamente non ho provato a infilarci pure il check dell'exit status per
la cancellazione ma potrebbe essere fattibile.
-- 
echo onailimissaM | awk 'BEGIN { FS = "" }
{ for (i = NF; i >= 1; i-- )
  printf $i }'; echo

 Qualcuno ha qualche suggerimento in merito?
Aggiungi la linea "set -x" oppure cambia la prima linea in
"#!/bin/sh -x". Poi ti studi la traccia (ce ti arriva per mail)...
Ciao,
-- 
        Roberto Divia`              Love at first sight is one of the greatest
Dep:PH Bat:53 Mailbox:C02110      labour-saving devices the world has ever seen
Route de Meyrin 385               ---------------------------------------------
Case Postale                                Phone:  
+41-22-767-4994
CH-1211 Geneve 23 CERN                      Fax:    
+41-22-767-9585
Switzerland                                 E-Mail: 
Robert...@cern.ch

 script in maniera corretta?
domani riesco anche a postarti i log, ma non segnala nessun errore

 sotto un $PATH alterato
Questa la provo

 la cancellazione ma potrebbe essere fattibile.
Grazie per il suggerimento :)

funzionano più!
Al 99% non hai il path a posto.
Personalmente io aggiungo sempre all'inizio dello script i path di
ricerca classici (/bin, /usr/bin, /usr/local/bin)
Nella mail che ti manda il crond però dovresti vedere qualche errore.
Ciao
	Cristian

 Nella mail che ti manda il crond però dovresti vedere qualche errore.
Non sono ancora riuscito a far funzionare la cosa. Il bello è che cron
non mi manda neanche le mail sul delivery locale, cioè: l'output dello
script lanciato da shell lo vedo (e con l'opzione -x lo vedo verbose),
mantre l'output dello stesso script lanciato da cron non lo vedo, e non
ce l'ho tra le mail locali di root!
Aiutatemi, sono disperato!

 ce l'ho tra le mail locali di root!
Questo non e` tanto normale. Verifica il log di cron (per default in /var/log).
Se mandi un mail a root, root lo vede?
Al limite, puoi cambiare la linea di cron in:
.... comando >/tmp/comando.log 2>&1
L'output te lo trovi in /tmp/comando.log


 Questo non e` tanto normale. Verifica il log di cron (per default in /var/log).
[...]
Ho risolto, ma sono comunque molto perplesso: fino a ieri eseguendo lo
script da riga di comando ottenevo il risultato voluto. Oggi, senza
nessuna variazione al sistema o al codice dello script, ho riprovato a
lanciarlo e ho avuto un errore da find. Alla fine ho racchiuso la
stringa di ricerca *.tar.gz tra virgolette e la cosa funziona, sia da
riga di comando che da cron!
Quello che non mi spiego è che anche senza virgolette ieri funzionava,
e quella è stata l'unica variazione che ho apportato.
bah!

 e quella č stata l'unica variazione che ho apportato.
Probabilmente e` stato creato un file con un nome strano (per esempio con
uno spazio) oppure avevi un file solo e ora ne hai due o via cosi`.
'*.tar.gz' oppure \*.tar.gz
Mai mettere *.tar.gz, lo shell te lo espande alla lista dei files che
trova. Prova a fare:
$ echo *
e vedrai che cosa succede.
