Y at-il un moyen facile de savoir si un script ruby est déjà en cours d'exécution et de le gérer de manière appropriée? Par exemple: J'ai un script appelé really_long_script.rb. Je l'ai cronné pour courir toutes les 5 minutes. Quand il s'exécute, je veux voir si l'exécution précédente est encore en cours et ensuite arrêter l'exécution du deuxième script. Des idées?Déterminer si un script ruby est déjà en cours d'exécution
Répondre
Le PS est un moyen très pauvre de faire cela et probablement ouvert à des conditions course. La méthode Unix/Linux traditionnelle consiste à écrire le PID dans un fichier (généralement dans/var/run) et à vérifier si ce fichier existe au démarrage.
par exemple. le fichier pid étant situé à /var/run/myscript.pid, vous vérifieriez s'il existe avant d'exécuter le programme. Il y a quelques astuces pour éviter les conditions de course impliquant l'utilisation de O_EXCL (verrouillage exclusif) pour ouvrir le fichier et les liens symboliques.
Cependant peu probable, vous devriez essayer de coder pour éviter les conditions de concurrence en utilisant des opérations atomiques sur le système de fichiers.
Pour enregistrer réinventer la roue, vous voudrez peut-être regarder http://rubyforge.org/projects/pidify/
En bash:
if ps aux | grep really_long_script.rb | grep -vq grep
then
echo Script already running
else
ruby really_long_script.rb
fi
Vous devriez également vérifier que le processus est en fait en cours d'exécution, de sorte que si votre script meurt sans se nettoyer, il courra le La prochaine fois, plutôt que de simplement vérifier que /var/run/foo.pid existe et quitte.
Highlander
Description de
Un petit bijou qui assure une seule instance de votre script principal est en cours d'exécution. Bref, il ne peut y en avoir qu'un seul.
Installation
gem install highlander
Synopsis
require 'highlander' # This should be the -first- thing in your code.
# Your code here
Pendant ce temps, sur la ligne de commande ...
# 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
Notes de
simplement exiger la pierre précieuse highlander assure tha t une seule instance de ce script ne peut pas être redémarrée. Si vous essayez de le redémarrer , cela provoquera une RuntimeError.
- 1. ASP - Déterminer si le script en cours est en cours d'exécution comme un include
- 2. Comment déterminer si un assemblage est en cours d'utilisation?
- 3. Vérifiez si l'application est déjà en cours d'exécution
- 4. Déterminer si le site est en cours d'exécution HTTPS
- 5. Comment déterminer si une page est en cours de redirection
- 6. Comment puis-je déterminer si le script est en cours d'exécution dans un appel système ou qx en Perl?
- 7. Comment déterminer si le canal distant est déjà enregistré
- 8. Comment puis-je savoir si un processus est déjà en cours d'exécution avec C#?
- 9. Comment déterminer si le code .NET est en cours d'exécution dans un processus ASP.NET?
- 10. Détection si un fichier est déjà ouvert en javascript/hta
- 11. Comment déterminer si une police TrueType est en italique?
- 12. comment puis-je déterminer si un script python est importé en tant que module ou exécuté en tant que script?
- 13. Comment vérifier si une action du contrôleur est déjà en cours de redirection?
- 14. Comment gérer les notifications push si l'application est déjà en cours d'exécution?
- 15. Comment vérifier si l'application Qt GUI est déjà en cours d'exécution (sous Linux)?
- 16. Comment savoir si une boucle de message MFC est déjà en cours d'exécution?
- 17. Comment savoir si je cours depuis JRuby contre Ruby?
- 18. Comment déterminer si un objet Rails est marked_for_destruction?
- 19. Déterminer si un type est statique
- 20. Vérifiez si un proc stocké est en cours d'exécution?
- 21. Détection si un processus est toujours en cours
- 22. Comment vérifier si un site Web est en cours
- 23. Rechercher si un fichier audio est en cours de lecture
- 24. Comment déterminer si un caractère est une lettre en Java?
- 25. Comment déterminer si la session Windows en cours est verrouillée ou non?
- 26. Comment déterminer si la fenêtre en cours est la fenêtre active?
- 27. Comment puis-je déterminer si une procédure stockée est en cours de recompilation à chaque fois?
- 28. Un travail SQL Server ignorera-t-il une exécution planifiée si elle est déjà en cours d'exécution?
- 29. Déterminer si l'utilisateur est connecté
- 30. si l'utilisateur est déjà connecté ou non?