Wie überprüfe ich das Laufzeitprotokoll für einen Batchjob, der mit dem Befehl „at“ übermittelt wurde?

Wie überprüfe ich das Laufzeitprotokoll für einen Batchjob, der mit dem Befehl „at“ übermittelt wurde?

Ich sende den Batch-Job in Ubuntu 20.

at now -f myscript.sh

Ich erhalte eine E-Mail mit einem Protokoll, wenn der Auftrag abgeschlossen ist. Bei einem zeitaufwändigen Auftrag möchte ich jedoch den Fortschritt während der Ausführung sehen. Wie kann ich das tun?

Antwort1

Dies wird sehr ausführlich sein, wenn Sie jedoch -x zur Shell in der ersten Zeile von myscript.sh hinzufügen, wird Ihnen die Ausführung Ihres Skripts Zeile für Zeile angezeigt. Die Ausgabe wird per E-Mail an den Benutzer gesendet, der den Auftrag übermittelt, und ist auch im Cron-Protokoll enthalten.

Beispiel: #!/bin/sh -x statt #!/bin/sh

Während der Job ausgeführt wird, führen Sie einfach tail -f im Cron-Protokoll aus und Sie können den Fortschritt verfolgen. Denken Sie daran, dass dabei eine Menge Protokolldaten erzeugt werden! Sie können Ihr Skript ändern, um den Fortschritt während des Vorgangs irgendwie anzuzeigen? echo „Teardown abgeschlossen, Einrichtung von xxx beginnt“

Antwort2

Das atTool erfasst die Standardausgabe des Prozesses und sendet sie dann als Protokoll. Ohne wesentliche Änderungen atist es daher nicht möglich, das Protokoll so zu lesen, wie es geschrieben wird.

Sie können jedoch mit einem zweiten Protokoll eine Problemumgehung durchführen. Drucken Sie einfach das „Fortschritts“-Protokoll in eine Datei mit einem bekannten Namen. Danach können Sie tail -fes nach Belieben verwenden oder ignorieren.

Mit anderen Worten würde das von Ihnen ausgeführte Skript atetwa so aussehen:

#!/bin/sh
echo Started at `date` 
echo Started at `date` > /var/myscript.log
some_long_running_process_with_log >> /var/myscript.log
rc=$?
echo Completed at `date` with return code $rc
echo Completed at `date` with return code $rc >> /var/myscript.log

In diesem Fall hätten Sie ein kurzes Protokoll (mit nur zwei Zeilen) zum atVersenden per E-Mail und das gesamte Protokoll des langwierigen inneren Teils.

Als Erweiterung dieses Ansatzes können Sie verwenden tee. Damit können Sie die Standardausgabe in die Datei duplizieren. Dies kann wiederum beim Duplizieren des Ausdrucks von Protokollnachrichten im Skript hilfreich sein.

#!/bin/sh
echo Started at `date` | tee /var/myscript.log
some_long_running_process_with_log >> /var/myscript.log
rc=$?
echo Completed at `date` with return code $rc | tee -a /var/myscript.log

verwandte Informationen