Domanda

Io uso crontab al compito invoke rake a un certo momento, ad esempio: ogni 3 ore

Voglio assicurare che quando crontab pronti per eseguire il compito rastrello si può verificare il task rake è in esecuzione. se è così non lo esegue.

come fare questo. grazie.

È stato utile?

Soluzione

Si potrebbe utilizzare un file di blocco per questo. Quando viene eseguita l'operazione, cercano di afferrare la serratura ed eseguire il task rake se si ottiene il blocco. Se non si ottiene il blocco, quindi fare rake non funzionare; si potrebbe desiderare di registrare un errore o un avviso da qualche parte troppo o si può finire con il vostro compito rake non facendo nulla per settimane o mesi prima di sapere su di esso. Quando uscite rastrello, sbloccare il file di blocco.

RAA aiuto forza, ma non l'ho usato in modo forse non .

Si potrebbe anche usare un file PID. Avresti un qualche file che contiene l'ID del processo rastrello processi. Prima di iniziare rastrello, si legge il PID da quel file e vedere se il processo è in esecuzione; se non è poi avviare rastrello e scrivere il suo PID al file PID. Quando esiste rastrello, eliminare il file PID. Che ci si vuole unire questo con il blocco sul file PID, se si vuole essere davvero rigorosi, ma questo dipende dalla vostra situazione particolare.

Altri suggerimenti

Lascio questo qui perché penso che sia utile:

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

Tutto ciò che serve è un gioiello di nome pidfile .

Aggiungi questo al vostro Gemfile:

gem 'pidfile', '>= 0.3.0'

E il compito potrebbe essere:

desc "my task"
task :my_task do |t|
  PidFile.new(piddir: "/var/lock", pidfile: "#{t.name}.pid")
  # do something
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top