
Ich habe ein Bash-Skript erstellt, das automatisierte EBS-Backups auf AWS ausführt. Es wird über einen Cronjob gestartet:
0 2 * * * /bin/bash /root/backup_snapshots.sh > backup.log 2>&1
Das funktioniert einwandfrei, aber als Nächstes möchte ich einen Exit-Code hinzufügen, der angibt, ob das Skript erfolgreich ausgeführt wurde oder nicht (damit ich eine Nagios-Prüfung darauf konfigurieren kann). Ich werde ein paar Dinge tun:
- Erstellen Sie die Datei „backup.log“ im Verzeichnis /var/log/backup/.
- Konfigurieren Sie logrotate so, dass es täglich rotiert, damit diese Prüfung leichter erkennbar ist.
Eine Frage habe ich jedoch: Ist es möglich, dass cron einen Exit-Code in die von mir erstellte Datei „backup.log“ schreibt? Oder sollte ich diese Art der Implementierung wählen:
Erstellen Sie einen Crontab-Eintrag mit einem Skript, das das eigentliche Skript starten kann UND einen Exit-Code wie diesen hat:
#!/bin/bash
/root/backup_snapshots.sh 2> /dev/null
if [ $? -eq 0 ]
then
echo "PASS"
else
echo "FAIL" >&2
fi
Ich möchte das so einfach wie möglich machen, also wenn Cron das kann, super! Wenn nicht, wäre das Nächstbeste, ein Bash-Skript zu erstellen, das backup_snapshots.sh ausführt und über Cron läuft?
Antwort1
#!/bin/bash
exec 1>/var/log/backup/backup_sbapshots.log 2>&1
if /root/backup_snapshots.sh
then
echo "PASS"
else
echo "FAIL"
fi
Erstellen Sie Ihr Cron-Skript wie gezeigt, das den Cronjob-Ausführungsstatus in die Backup-Protokolldatei einträgt. Beachten Sie, dass die Variable nirgends erwähnt wird, $?
da die if
Anweisung für sich allein steht.