En Ruby 1.9.x, ¿cuál podría ser una forma sencilla de no permitir que mi script Ruby vuelva a ejecutarse o esperar a que termine la instancia anterior? **¿Cómo limitar las instancias simultáneas del mismo script de Ruby?
Espero evitar el bloqueo de archivos desordenado o verificar la tabla de procesos.
¿Hay algo así como un global mutex o un semáforo ya en el núcleo? Estudié el Mutex nativo, pero eso solo parece aplicarse a los hilos dentro de un proceso Ruby, no a través de procesos diferentes.
** Más adelante, podría agregar la funcionalidad de tiempo de espera, o limitar a N instancias, o utilizar más de un bloqueo global (uno por recurso de todo el sistema que solo debería tener una instancia máxima).
Ya envuelvo la mayoría de mis scripts de Ruby con Bash que ellos mismos usan código como '[-z" $ (pidof -x -o% PPID -o $$ $ {0 ## * /}) "] || exec echo "$ (date) $ 0: $$ ya huele a PID: $ (pidof -x $ 0), ¡adiós!" 'sin embargo, eso sirve para otros propósitos. Una solución aún mejor que ya está contenida dentro de Ruby es bloquear cualquier archivo fijo para escribir, por ejemplo. '/ tmp/scriptname.rb.lock'. Al salir o incluso si mi código falla (lo cual a menudo genera excepciones), el sistema borrará ese bloqueo. Voy a seguir con ese truco hasta que haya una interfaz limpia y nativa para los semáforos globales, que de todos modos necesitaré. – Marcos