2017-02-23 4 views
1

Ich baue ein Backup-Skript auf Ubuntu laufen.Crontab läuft Bash auf andere Weise

backup-all.sh Datei:

echo "bootstrap" 
/home2/backup/bootstrap/backup.sh 
BOOTSTRAP_STATUS=$([ "$?" == 0 ] && echo "OK" || echo "** FAIL **") 

echo "sv2" 
/home2/backup/sv2/backup.sh 
SV2_STATUS=$([ "$?" == 0 ] && echo "OK" || echo "** FAIL **") 

if [ "$BOOTSTRAP_STATUS" == "OK" ] && [ "$SV2_STATUS" == "OK" ] ; then 
TITULO="Backup OK" 
else 
TITULO="Backup !FAILED!" 
fi 

(
     echo "Backup status" 
     echo "-------------" 
     echo "BOOTSTRAP_STATUS = $BOOTSTRAP_STATUS" 
     echo "SV2_STATUS = $SV2_STATUS" 
     echo "-------------" 
) | mail -s "${TITULO}" "[email protected]" 

Die backup.sh Dateien endet mit:

exit 0 # for success; OR: 
exit 1 # for errors + send mail with log file 

* backup.sh Dateien rsync und MySQL Backup enthält.

Wenn das Skript 1 (Fehler) zurückgibt, wird es mir auch eine E-Mail senden, die mir sagt, dass etwas nicht stimmt und alle Schritte in einer Protokolldatei aufgezeichnet werden.

** Ich habe E-Mail-Anrufe. Eine für die Übersicht und eine für jeden "Server", der Fehler bekommt.

Also, wenn ich manuell ausführen,

./backup-all.sh 

Alles ist schön. Ich erhalte nur eine Mail mit dem Titel "Backup OK".

Wenn ich Cron darauf warte, den Job auszuführen, erhalte ich nur eine Mail mit dem Titel "Backup! FAILED!", Obwohl ich keine Fehlerdetails erhalten habe und die Protokolldateien in Ordnung sind. So

crontab -e 
0 0 * * * /home2/backup/backup-all.sh 

, was Cron-Job nicht mit dem Zustand/Ausgangswerte meiner Skripte?

+2

Wenn Sie bash (mit '#!/Bin/bash') nicht explizit anfordern, ist es wahrscheinlich, dass' ["$?" == 0] 'ist ein Syntaxfehler. –

+2

Kein Syntaxfehler, nur ein ungültiges Argument wird an '[' übergeben. –

Antwort

2

zu debuggen, log stdout und Fehlerdatei zu protokollieren:

0 0 * * * /home2/backup/backup-all.sh > /tmp/debug.log 2>&1 

einige Möglichkeiten, cron hat keine richtige env standardmäßig oder durch Design:

  1. rsync und mysqldump nicht in cron env
  2. hinzufügen #!/usr/bin/bash zu Ihrem Bash-Skript
+0

Option 2 gelöst. Das einzige ist, dass ich zu "#!/Bin/bash" wechseln muss. Vielen Dank – lcssanches

Verwandte Themen