2016-06-24 6 views
2

ich einen Server-Prozess bin Codierung, und ich möchte ein Bash-Skript machen, dass der Prozess in einer von zwei Bedingungen wird neu gestartet:Bash-Skript-Prozess auf Absturz neu starten oder auf Dateiänderung

  1. Der aktuelle Prozess Ausgänge (in diesem Fall einen Neustart nach einer gewissen Verzögerung)
  2. Die ausführbare Datei geändert wird (in diesem Fall sofort neu starten)

Das Skript selbst in jedem Zustand nicht beendet werden sollte.

Ich kann eines dieser Dinge tun (mit einer einfachen Schleife oder mit fswatch), aber meine Versuche, beides zu tun, haben nicht funktioniert. Gibt es eine Möglichkeit, beides in einem Bash-Skript zu tun?

Antwort

1

Ich bin nicht vertraut mit fswatch, aber vorausgesetzt, Sie entscheidet sich und Pfad festgelegt haben, so dass sie nur Daten schreiben wird, wenn die Datei, die Sie über Änderungen kümmern und Sie sind nicht besorgt über Pufferung, können Sie versuchen:

fswatch $opts $path | while read k; do kill $pid; done & 
while sleep 1; do # delay 1 second between restarts 
    cmd & 
    pid=$! 
    wait $pid 
done 

Diese Datei wird nicht sofort neu gestartet, wenn sich die ausführbare Datei ändert. Um das zu bekommen, könntest du es tun (aber ich glaube nicht, dass es sich lohnt):

+0

Ich bin nicht 100% sicher, dass im zweiten Fall der '$?' Basierte Test zuverlässig ist. In beiden Fällen ist es der Exit-Status desselben Prozesses. Es kann also nicht möglich sein, zwischen zwei Fehlerfällen zu unterscheiden ... Können wir eine Variable in der fswatch-basierten Schleife setzen (wir würden eine Prozessumleitung für diese oder "shopt -s lastpipe" benötigen) und sie in der "while true" -Schleife verwenden ? – anishsane