[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Script shell non funziona correttamente da cron.





Il 29/06/2015 11:15, Walter Valenti ha scritto:
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

Hai ragione. Ho modificato lo script per capire quale fosse la dir corrente ed era quella di cron.
Ho corretto modificando lo script con cd ecc. e funziona.
Pensavo che cron prendesse come directory di lavoro quella in cui risiedeva lo script, ed essendo la medesima in cui risiedono i file su cui lavorare non avrebbero dovuto esserci problemi.
Vi ringrazio per l'aiuto.
Domenico.


Reply to: