Gibt es eine einfache Möglichkeit zu sagen, ob ein Ruby-Skript bereits ausgeführt wird, und es dann entsprechend zu behandeln? Zum Beispiel: Ich habe ein Skript namens real_long_script.rb. Ich habe es geschafft, alle 5 Minuten zu laufen. Wenn es läuft, möchte ich sehen, ob der vorherige Lauf noch läuft und dann die Ausführung des zweiten Skripts stoppen. Irgendwelche Ideen?Ermitteln Sie, ob ein Ruby-Skript bereits ausgeführt wird
Antwort
Der ps ist eine wirklich schlechte Art und Weise davon und wahrscheinlich offen für Rennbedingungen zu tun.
Der traditionelle Unix/Linux Weg wäre, die PID in eine Datei zu schreiben (normalerweise in/var/run) und zu überprüfen, ob diese Datei beim Start existiert.
z.B. Die PID-Datei befindet sich unter /var/run/myscript.pid. Dann sollten Sie vor dem Ausführen des Programms prüfen, ob diese Datei vorhanden ist. Es gibt ein paar Tricks, um Race-Bedingungen zu vermeiden, die O_EXCL (Sperren ausschließen) beinhalten, um die Datei und symbolische Links zu öffnen.
Wie auch immer, Sie sollten versuchen, einen Code zu schreiben, um Race Conditions durch atomare Operationen auf dem Dateisystem zu vermeiden.
neu zu erfinden das Rad zu sparen, könnte man bei http://rubyforge.org/projects/pidify/
In bash:
if ps aux | grep really_long_script.rb | grep -vq grep
then
echo Script already running
else
ruby really_long_script.rb
fi
aussehen wollen, sollten Sie wahrscheinlich auch prüfen, dass der Prozess tatsächlich ausgeführt wird, so dass, wenn Ihr Skript stirbt, ohne selbst aufräumen, es ist die laufen beim nächsten Mal, anstatt einfach zu überprüfen, ob /var/run/foo.pid existiert und beendet wird.
Highlander
Beschreibung
Ein Juwel, das nur eine Instanz des Haupt-Skript stellt sicher ausgeführt wird. Kurz gesagt, es kann nur einen geben.
Installations
gem install highlander
Synopsis
require 'highlander' # This should be the -first- thing in your code.
# Your code here
der Zwischenzeit wieder auf der Kommandozeile ...
# First attempt, works. Assume it's running in the background.
ruby your_script.rb
# Second attempt while the first instance is still running, fails.
ruby your_script.rb # => RuntimeError
Hinweise
einfach das Hochländer gem erfordern sorgt für tha t nur eine Instanz dieses Skripts kann nicht erneut gestartet werden. Wenn Sie versuchen, es erneut zu starten, wird einen RuntimeError auslösen.
- 1. Ermitteln Sie, ob ein Programm auf einem Remotedesktop ausgeführt wird
- 2. Ermitteln, ob ein Prozess in lxc/Docker ausgeführt wird
- 3. So ermitteln Sie, ob ein Ereignis bereits abonniert wurde
- 4. Ermitteln, ob ein Programm im Debug-Modus ausgeführt wird
- 5. C/C++ Ermitteln, ob ein Programm ausgeführt wird
- 6. So ermitteln Sie, ob Eclipse im Debug-Modus ausgeführt wird
- 7. So ermitteln Sie, ob Git merge ausgeführt wird
- 8. Ermitteln Sie dynamisch, ob Azure ausgeführt wird oder nicht?
- 9. So ermitteln Sie, ob eine Webanwendung gerade ausgeführt wird
- 10. Überprüfen Sie, ob ein Python-Skript ordnungsgemäß ausgeführt wird und ob es nicht erneut ausgeführt wird.
- 11. Ermitteln, ob ein UIViewController modal präsentiert wird
- 12. So ermitteln Sie, ob der Remoting-Kanal bereits registriert ist
- 13. Ermitteln, ob MATLAB startup.m auf einem Worker ausgeführt wird
- 14. Ermitteln, ob auf der Site HTTPS ausgeführt wird
- 15. Ermitteln, ob die Swift-App von Xcode ausgeführt wird
- 16. Ermitteln, ob das Programm mit vollen Administratorrechten ausgeführt wird
- 17. Ermitteln, ob der Servlet-Container ausgeführt wird Eclipse Jetty
- 18. Erkennen, ob eine andere Instanz der Anwendung bereits ausgeführt wird
- 19. Ermitteln Sie, ob ein Ereignis mit
- 20. Überprüfen, ob ein Programm ausgeführt wird
- 21. Prüfen, ob die Task bereits ausgeführt wird, bevor sie neu gestartet wird
- 22. Überprüfen Sie, ob ein Prozess mit Shell-Skript ausgeführt wird
- 23. Überprüfen Sie, ob ein Windows-Dienst ausgeführt wird?
- 24. Überprüfen Sie, ob ein Ereignis bereits
- 25. Ermitteln, ob der Port verwendet wird?
- 26. Überprüfen Sie, ob ein MotionEvent.ACTION_MOVE ausgeführt wurde
- 27. Ermitteln der Azure Web- oder Worker-Rolle? (Alternate: Ermitteln, ob in IIS ausgeführt wird?)
- 28. So ermitteln Sie, ob der Prozess vom Dienststeuerungs-Manager ausgeführt wird
- 29. Ermitteln, warum ein PHP-Skript langsam ausgeführt wird
- 30. R: Ermitteln, ob ein Skript in Windows oder Linux ausgeführt wird