Ich habe ein Skript, das alle 5 Minuten ausgeführt wird und in einer Bedingungsklausel zwei Ausgänge aufweist.
#!/bin/bash
date=$(date +%Y)
if [ $date -eq '2014' ]
then
echo "Current year is $date"
exit 0
else
echo "Current year is not $date"
exit 2
fi
Wie kann ich angeben, dass nur beim Beenden 2 ein Protokoll geschrieben wird? Wäre dies in crontab möglich?
5 * * * * /home/user/script.sh >> script.log 2>> script.err
Ich habe verstanden, dass " >> Skript.log "schreibt alle Rückgaben des Skripts und" 2 >> script.err "schreibt nur, wenn das Skript nicht korrekt ausgeführt wurde. Ich weiß also nicht, ob es eine Möglichkeit gibt, nur dort zu schreiben, wo das Skript an zweiter Stelle endet.
Antwort1
So beschreiben Sie Ihren Fehler zur stderr
Verwendung der 1>&2
Weiterleitung:
echo "Current year is not $date" 1>&2
exit [number]
gibt einen Rückgabecode von an [number]
.
Siehe auch:
Antwort2
logger
Sie könnten ( ) verwenden, man logger
da es von ausgeführt wird cron
. Und Sie brauchen die Exit-Codes nicht wirklich, da Sie damit nichts anfangen, zumindest nicht im obigen Snippet.
#!/bin/bash
DATE=$(date +%Y)
if [ $DATE -ne '2014' ]; then
logger -f script.log "Current year is not $date"
fi