¿Hay alguna manera fácil de saber si una secuencia de comandos de ruby ya se está ejecutando y luego manejarla correctamente? Por ejemplo: tengo un script llamado really_long_script.rb. Lo tengo cronned para que se ejecute cada 5 minutos. Cuando se ejecuta, quiero ver si la ejecución anterior aún se está ejecutando y luego detener la ejecución del segundo script. ¿Algunas ideas?Determine si ya se está ejecutando una secuencia de comandos de ruby
Respuesta
El PS es una manera muy mala de hacerlo y, probablemente, abierta a condiciones de carrera.
La manera tradicional de Unix/Linux sería escribir el PID en un archivo (generalmente en/var/run) y verificar si ese archivo existe al inicio.
p. Ej. el archivo pid se encuentra en /var/run/myscript.pid y luego verifica si existe antes de ejecutar el programa. Hay algunos trucos para evitar las condiciones de carrera que implican el uso de O_EXCL (bloqueo de exclusión) para abrir el archivo y los enlaces simbólicos.
Por improbable que sea, debe intentar codificar para evitar condiciones de carrera mediante el uso de operaciones atómicas en el sistema de archivos.
Para guardar reinventar la rueda, es posible que desee ver en 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
Debería probablemente comprobar que el proceso se está ejecutando, por lo que si la secuencia de comandos muere sin limpiar a sí misma, se ejecutará la la próxima vez en lugar de simplemente verificar que /var/run/foo.pid exista y exista.
Highlander
Descripción
Una joya que asegura sólo una instancia de la secuencia de comandos principal se está ejecutando. En resumen, solo puede haber uno.
instalación
gem install highlander
Sinopsis
require 'highlander' # This should be the -first- thing in your code.
# Your code here
Mientras tanto, en la línea de comandos ...
# 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
Notas
Simplemente requiere la gema Highlander asegura tha t solo una instancia de esa secuencia de comandos no se puede iniciar de nuevo. Si intenta volver a iniciarlo , se generará un RuntimeError.
- 1. comisión si ya se está ejecutando
- 2. Shell script: Asegúrese de que la secuencia de comandos no se ejecuta si ya se está ejecutando
- 3. ¿Puede una secuencia de comandos bash decir si se está ejecutando a través de cron?
- 4. ¿Cómo comprobar si una aplicación WPF ya se está ejecutando?
- 5. Ejecutando Scrapy desde una secuencia de comandos: se bloquea
- 6. ¿Cancelar una tarea que ya se está ejecutando con Apio?
- 7. PyQt: ¿cómo detectar y cerrar la IU si ya se está ejecutando?
- 8. Python: Cómo prohibir la apertura de una aplicación si ya se está ejecutando
- 9. ¿Un trabajo de SQL Server saltará una ejecución programada si ya se está ejecutando?
- 10. ¿Es posible conocer qué secuencia de comandos se está ejecutando un proceso de python?
- 11. Ejecutando MSTest UnitTests usando una secuencia de comandos de MSBuild
- 12. python: determine si una clase está anidada
- 13. Programmatically determine si el código se está ejecutando en IIS Express
- 14. R: determine si un script se está ejecutando en Windows o Linux
- 15. Determine si un programa se está ejecutando en un escritorio remoto
- 16. ¿cómo puedo determinar si una secuencia de comandos python se importa como módulo o se ejecuta como secuencia de comandos?
- 17. Detectando si ya se está ejecutando otra instancia de la aplicación
- 18. Verifica programáticamente si se está ejecutando syncdb
- 19. Verificando un proceso php ya se está ejecutando
- 20. Cygwin ejecutando secuencia de comandos de un archivo por lotes?
- 21. Comprobar si el proceso se está ejecutando
- 22. powershell: ¿cómo comprobar si se está ejecutando la transcripción?
- 23. eclipse stop popup "Lanzamiento web ya se está ejecutando"
- 24. TFS 2010 API, determine en qué servidor de compilación se está ejecutando una compilación.
- 25. ¿Cuál es la forma correcta de detectar si ruby se está ejecutando en Windows?
- 26. Cómo comprobar si se está ejecutando un Thread de Android
- 27. Descubriendo si la actividad de Android se está ejecutando
- 28. Cómo rastrear si se está ejecutando una tarea async/awaitable
- 29. Cómo determinar si una aplicación web se está ejecutando actualmente
- 30. ¿Continuar script si solo se está ejecutando una instancia?