Sehen Sie sich die Ausgabe an, bevor sie abgeschlossen ist


8

Angenommen, ich führe ein Skript unter atLinux aus (Beispiel unten), von dem ich weiß, dass es mehrere Stunden oder sogar mehrere Tage dauern wird. Ich bin daran gewöhnt, ateine E - Mail mit der Ausgabe des Befehls sendet , sobald es abgeschlossen ist , aber was ist, wenn ich Blick auf die aktuelle Ausgabe wollte , bevor er abgeschlossen ist ? Nehmen wir auch an, ich habe das Skript bereits ausgeführt und vergessen, die Ausgabe mit oder ähnlichen Methoden umzuleiten tail, teeund möchte das Skript nicht stoppen. Gibt es sowieso dafür?

drew@anubis:~$ at now
warning: commands will be executed using /bin/sh
at> ./myscript.sh
at> <EOT>
job 3 at Sat Jan  7 09:31:00 2017

Spitze oder Blick? Sie möchten sehen, was es tut, während es es tut?
Geselle Geek

@JourneymanGeek, Ups. Peek wäre das, was ich tippen wollte. Ich möchte sehen, was es tut.
Drew Chapin

Die Skriptausgabe in eine Datei umleiten, wenn Sie den at job und tail -fdiese Datei planen ?
Muru

@muru, Lass uns so tun, als hätte ich das Skript bereits ohne Verwendung ausgeführt tailund möchte es nicht stoppen.
Drew Chapin

Ich müsste testen, würde aber das Skript so ändern, dass es tee verwendet, die Ausgabe in einer Datei speichert und dann funktioniert?
Geselle Geek

Antworten:


9

Wenn der Job gestartet wurde und Sie eine Möglichkeit haben, die PID dieses Jobs zu erhalten, können Sie sehen, wo atdie Ausgabe gespeichert wird:

$ at now
warning: commands will be executed using /bin/sh
at> sleep 10m
at> <EOT>
job 7 at Sat Jan  7 20:18:00 2017
$ pgrep sleep
7582
$ ls -l /proc/7582/fd
total 0
lr-x------ 1 muru muru 64 Jan  7 20:19 0 -> /var/spool/cron/atjobs/a0000701795998 (deleted)
lrwx------ 1 muru muru 64 Jan  7 20:19 1 -> /var/spool/cron/atspool/a0000701795998
lrwx------ 1 muru muru 64 Jan  7 20:19 2 -> /var/spool/cron/atspool/a0000701795998

Wie Sie sehen können, wird die Ausgabe in einer temporären Datei gespeichert, die Sie jetzt überprüfen können:

$ sudo tail -f /var/spool/cron/atspool/a0000701795998
Subject: Output from your job        7
To: muru

Sie benötigen, sudoweil das enthaltende Verzeichnis nicht weltweit zugänglich ist (zumindest unter Ubuntu 14.04):

$ sudo namei -lx /var/spool/cron/atspool/a0000701795998
f: /var/spool/cron/atspool/a0000701795998
Drwxr-xr-x root     root   /
drwxr-xr-x root     root   var
drwxr-xr-x root     root   spool
drwxr-xr-x root     root   cron
drwxrwx--T daemon   daemon atspool
-rw------- muru     muru   a0000701795998

1
Sie, mein Herr, sind mein Held! Das hat perfekt funktioniert!
Drew Chapin

4
Ich möchte jedoch hinzufügen, dass Sie, wenn Sie wissen, nur einen atJob ausführen. Sie brauchen nicht einmal die PID. Sie können einfach ausführen sudo ls /var/spool/cron/atspoolund es sollte theoretisch die einzige Datei dort sein.
Drew Chapin

0

Eine andere Möglichkeit, um festzustellen, welche Spooldatei zu Ihrem Job gehört, besteht darin, die Jobnummer von abzurufen atq.

drew@sokar:~$ atq
38      Tue Jul 10 12:15:00 2018 = drew

Konvertieren Sie die Jobnummer in hex. zB 38 (dec) = 26 (hex).

drew@sokar:~$ printf "%x\n" 38
26

Ihre Datei wird als Warteschlangenbuchstabe bezeichnet (in 99% der aFälle), gefolgt von einer 5-stelligen Hex-Job-ID (dies habe ich durch Durchsuchen des Quellcodes des atBefehls gelernt ).

drew@sokar:~$ sudo ls -l /var/spool/cron/atspool
total 55968
-rw------- 1 drew drew       49 Feb 16  2017 a0001c017a3cb2
-rw------- 1 drew drew 57297586 Feb 26  2017 a0001e017a7405
-rw------- 1 drew drew     2329 Jul 10 12:21 a0002601856a0f
                                              -----

Dann können Sie den Standard anzeigen

drew@sokar:~$ sudo less /var/spool/cron/atspool/a0002601856a0f
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.