Ciao,
ho un problema con uno script. Se lanciato da shell fa il "suo
lavoro",
se schedulato in cron lo fa parzialmente.
Cosa dovrebbe fare:
rileva il giorno della settimana
richiama una funzione, che controlla se esiste una dir, in caso positivo
controlla se esiste un file, quindi lo cancella e poi crea un file
con lo stesso nome di quello appena cancellato facendo con tar un file
bz2 e cancella la dir usata per creare il file.
Nello script ci sono una serie di echo per controllare cosa fa, ed alla
fine un chown per restituire i files ad un determinato utente.
Se metto lo script in cron, nella email che mi invia vedo l'output di
echo e quello di chown ma i vari rm e tar li salta.
Sapreste darmi una mano ?
Grazie.
Uno degli errori tipici è dimenticarsi che cron non ha ambiente.
Quindi se usi della variabili d'ambiente del tuo script, se non le importi
(es. source) non te le trovi. P.S.
Se posti il tuo script possiamo aiutarti meglio. Walter
ecco lo script:
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Day=$(date -d "$D" '+%a')
tar=/bin/tar
rm=/bin/rm
chown=/bin/chown
function creaTar() {
echo 'Inizio operazioni sulla dir DATI...'
echo 'Controllo se esiste il backup....'
if [ -d Backup\\As400Stamet\\DATI_$1 ]
then
if [ -f $2_DATI_$1.bz2 ]
then
echo 'Il backup esiste, procedo...'
echo 'Cancello i file di backup vecchi.... '
echo "$2_DATI_$1.bz2"
$rm $2_DATI_$1.bz2
fi
echo 'Creo tar...'
echo "$2_DATI_$1.bz2"
echo 'Della dir DATI...'
echo "Backup\\As400Stamet\\DATI_$1"
$tar -cvjpf $2_DATI_$1.bz2 Backup\\As400Stamet\\DATI_$1
--remove-files
echo 'Fine operazioni sulla dir DATI'
fi
echo 'Inizio operazioni sulla dir GEN...'
echo 'Controllo se esiste il backup....'
if [ -d Backup\\As400Stamet\\GEN_$1 ]
then
if [ -f $3_GEN_$1.bz2 ]
then
echo 'Inizio operazioni sulla dir GEN...'
echo 'Il backup esiste, procedo...'
echo 'Cancello i file di backup vecchi....'
echo "$3_GEN_$1.bz2"
$rm $3_GEN_$1.bz2
fi
echo 'Creo tar...'
echo "$3_GEN_$1.bz2"
echo 'della dir GEN...'
echo "Backup\\As400Stamet\\GEN_$1"
$tar -cvjpf $3_GEN_$1.bz2 Backup\\As400Stamet\\GEN_$1
--remove-files
echo 'Fine operazioni sulla dir GEN...'
fi
}
case $Day in
Mon)
creaTar "Venerdi" "009" "010"
echo 'Assegno la proprietà dei file bz2 ad utente As400...'
$chown -Rv as400:nogroup /bck-as400/*.bz2 ;;
Tue)
creaTar "Lunedi" "001" "002"
echo 'Assegno la proprietà dei file bz2 ad utente As400...'
$chown -Rv as400:nogroup /bck-as400/*.bz2 ;;
Wed)
creaTar "Martedi" "003" "004"
echo 'Assegno la proprietà dei file bz2 ad utente As400...'
$chown -Rv as400:nogroup /bck-as400/*.bz2 ;;
Thu)
creaTar "Mercoledi" "005" "006"
echo 'Assegno la proprietà dei file bz2 ad utente As400...'
$chown -Rv as400:nogroup /bck-as400/*.bz2 ;;
Fri)
creaTar "Giovedi" "007" "008"
echo 'Assegno la proprietà dei file bz2 ad utente As400...'
$chown -Rv as400:nogroup /bck-as400/*.bz2 ;;
esac
echo 'Fine operazioni della fase di backup..'
Ad occhio è perché non vai nella directory, quando lo esegui con cron.
Prima di poter eseguire i vari rm e tar, devi andarci con: cd __DIRECTORY__
Walter