Pregunta

Yo uso crontab a la tarea de invocación rastrillo en algún momento, por ejemplo: cada 3 hora

Quiero asegurar que cuando crontab listo para ejecutar la tarea rake se puede comprobar la tarea rastrillo está en marcha. si es así que no se ejecute.

cómo hacer esto. gracias.

¿Fue útil?

Solución

Se puede usar un archivo de bloqueo para esto. Cuando se ejecuta la tarea, tratan de apoderarse de la cerradura y ejecutar la tarea rake si se obtiene la cerradura. Si usted no recibe la cerradura, y luego hacer el rastrillo no se ejecute; es posible que desee registrar un error o advertencia alguna parte demasiado o puede terminar con su tarea rake no hacer nada durante semanas o meses antes de que usted sabe sobre él. Cuando las salidas del rastrillo, desbloquear el archivo de bloqueo.

RAA ayuda fuerza, pero no he utilizado así que quizás no .

También podría utilizar un archivo PID. Tendrías algún lugar un archivo que contiene el ID de proceso de los procesos de desprendimiento. Antes de iniciar el rastrillo, se lee el PID de ese archivo y ver si el proceso está en marcha; si no es entonces puesta en marcha rastrillo y escribir su PID en el archivo PID. Cuando existe rastrillo, borrar el archivo PID. Lo que quiere combinar esto con bloqueo en el archivo PID si quieres ser muy estricta, pero esto depende de su situación particular.

Otros consejos

voy a dejar esto aquí, porque creo que es útil:

task :my_task do
    pid_file = '/tmp/my_task.pid'
    raise 'pid file exists!' if File.exists? pid_file
    File.open(pid_file, 'w'){|f| f.puts Process.pid}
    begin
        # execute code here
    ensure
        File.delete pid_file
    end
end

Todo lo que necesita es una joya llamada pidfile .

Añadir esto a su Gemfile:

gem 'pidfile', '>= 0.3.0'

Y la tarea podría ser:

desc "my task"
task :my_task do |t|
  PidFile.new(piddir: "/var/lock", pidfile: "#{t.name}.pid")
  # do something
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top