Schreiben Sie ein Protokoll für eine falsche Aussage einer if-Bedingung, die Exit 2 zurückgibt

Schreiben Sie ein Protokoll für eine falsche Aussage einer if-Bedingung, die Exit 2 zurückgibt

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 stderrVerwendung der 1>&2Weiterleitung:

echo "Current year is not $date" 1>&2

exit [number]gibt einen Rückgabecode von an [number].

Siehe auch:

Dateideskriptoren

Standard-Streams

Alles über die Umleitung

Antwort2

loggerSie könnten ( ) verwenden, man loggerda 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

verwandte Informationen