Question

J'utilise crontab d'invoquer la tâche de râteau à un moment donné, par exemple: toutes les 3 heures

Je veux faire en sorte que lorsque crontab prêt à exécuter la tâche de râteau il peut vérifier la tâche de coupe est en cours d'exécution. si elle est donc ne pas exécuter.

comment faire cela. merci.

Était-ce utile?

La solution

Vous pouvez utiliser un fichier de verrouillage pour cela. Lorsque la tâche est exécutée, essayez de saisir le verrou et exécuter la tâche de râteau si vous obtenez la serrure. Si vous ne recevez pas la serrure, puis ne râteau pas courir; vous pouvez enregistrer une erreur ou un avertissement quelque part trop ou vous pouvez vous retrouver avec votre tâche Rake ne pas faire quoi que ce soit pendant des semaines ou des mois avant que vous en savez. Lorsque les sorties de râteau, déverrouiller le fichier de verrouillage.

Quelque chose comme pourrait aide ZRÉ mais je l'ai pas utilisé alors peut-être pas .

Vous pouvez également utiliser un fichier PID. Vous auriez un endroit de fichier qui contient les processus rake ID de processus. Avant de commencer rake, vous lisez le PID de ce fichier et voir si le processus est en cours d'exécution; si elle est pas alors démarrer râteau et écrire son PID dans le fichier PID. Quand existe rake, supprimez le fichier PID. Vous voudriez combiner avec verrouillage sur le fichier PID si vous voulez être vraiment stricte, mais cela dépend de votre situation particulière.

Autres conseils

Je vais laisser ce ici parce que je pense qu'il est 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

Tout ce que vous avez besoin est un petit bijou nommé pidfile .

Ajouter à votre Gemfile:

gem 'pidfile', '>= 0.3.0'

Et la tâche pourrait être:

desc "my task"
task :my_task do |t|
  PidFile.new(piddir: "/var/lock", pidfile: "#{t.name}.pid")
  # do something
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top