Es gibt hier ein paar Fragen und Antworten, um benachrichtigt zu werden, wenn ein Prozess abgeschlossen ist / beendet wird ( 1 , 2 ) - diese setzen jedoch alle voraus, dass der Benutzer den Prozess selbst ausgegeben hat, und können ihn daher mit einem in die eingebauten Alert skripten regeln Skript oder leiten Sie den Prozess zu einer Art Warnung.
Meine Situation ist, dass ich über den Abschluss / das Beenden eines Prozesses informiert werden möchte, den mein Benutzer nicht initialisiert. Ich verarbeite gerade massive Videodateien auf einem Ubuntu 12.04 LTS-Server. Bestimmte Vorgänge mit diesen Dateien dauern sehr lange, daher hätte ich gerne eine Warnung (E-Mail wäre toll), wenn eine bestimmte abgeschlossen ist. Sie dauern so lange, dass es völlig in Ordnung wäre, dies einmalig manuell auf der Basis von PIT durchzuführen.
Weitere Informationen: Angenommen, ich bearbeite eine besonders große Datei und sehe, dass sie zu einem FFMPEG-Skript weiterentwickelt wurde. Dabei handelt es sich um ein Python-Skript (das recht komplex und nicht von mir selbst geschrieben ist) Ich möchte nicht ändern - obwohl dies der erste logische Ansatz wäre). Ich stelle mir vor, Sie geben einen Befehl oder ein Skript mit der PID des laufenden Python-Skripts als Argument aus, und wenn der Prozess mit dieser PID nicht mehr ausgeführt wird, macht das Warnskript seine Sache.
Irgendwelche Ideen?
Antworten:
Ich habe process_watcher.py geschrieben
Derzeit sieht der E-Mail-Text folgendermaßen aus:
Erstellen Sie ein GitHub-Problem, wenn Sie Verbesserungen benötigen.
quelle
Etwas wie das?
Ersetzen Sie diese
$pid
durch die Prozess-ID und das,echo "finished"
was Sie tun möchten, wenn der Prozess beendet wird.Beispielsweise:
quelle
kill -0
BerichteNo such process
für inexistent pids undOperation not permitted
für pids von einem anderen Benutzer gehören , so vielleicht die Fehlermeldung zu interpretieren sollte die Notwendigkeit vermeiden fürsudo
echo -en "\007 \007 \007"
, was ein Endgerät "klingeln" wird. Ob dies zu einem tatsächlich hörbaren Klang führt, hängt von Ihrem Terminal und Ihrer Hardware ab (in der Regel jedoch).Ich verwende
&&
, um einen zweiten Befehl auszuführen, wenn der erste erfolgreich abgeschlossen ist. Hier einige Beispiele:Löschen Sie einen großen Ordner und piepen Sie:
Kompiliere einen Kernel und sende eine E-Mail:
Ist dies ein guter Weg, um Ihr Problem zu lösen? In einem anderen Fall können Sie im Fehlerfall einen
||
und einen dritten Befehl hinzufügen .Ein Shell-Skript könnte auch den Exit-Status (
$?
) Ihres Befehls erhalten und mitif/else
und Schleifen können Sie tun, was Sie wollen.quelle
Wenn Sie die PID nicht haben, wird dies ausgeführt, bis alle Instanzen von ffmpeg abgeschlossen sind:
quelle
Wenn Sie keine Abfrageoption oder kein externes Skript verwenden möchten und den lang andauernden Prozess bereits gestartet haben, können Sie ihn mit STRG + Z anhalten (SIGTSTP-Signal senden) und anschließend mit fortsetzen
fg
(Prozess nach verschieben) der Vordergrund).Beispielsweise:
quelle
Ich habe eine App erstellt, die eine Benachrichtigung an Ihr Android-Handy sendet, wenn ein Vorgang endet, sodass Sie nicht an Ihren Computer gebunden sein müssen.
Installieren Sie und fügen Sie dann
;notifier.sh
am Ende Ihres Befehls hinzu.Wenn Ihr Befehl beispielsweise war
make install
, würden Sie Ihren Befehl ausführen:make install; notifier.sh
https://notifier.sh
https://play.google.com/store/apps/details?id=sh.notifier
quelle