質問

クロンタブを使用して、たとえばレーキタスクを呼び出します:3時間ごとに

Rakeタスクを実行する準備ができたら、Rakeタスクが実行されていることを確認したいと思います。そうであれば、実行しないでください。

これを行う方法。ありがとう。

役に立ちましたか?

解決

これにはロックファイルを使用できます。タスクが実行されたら、ロックを取得した場合は、ロックをつかんでレーキタスクを実行してください。ロックがない場合は、レーキを実行しないでください。どこかでエラーや警告を記録したいと思うかもしれませんし、あなたがそれを知る前に数週間または数ヶ月間何もしないとあなたのレーキタスクに終わることができます。レーキが終了したら、ロックファイルのロックを解除します。

何かのようなもの ラア 助けになるかもしれませんが、私はそれを使用していないので、多分そうではありません。

PIDファイルを使用することもできます。 Rake Process Process IDを保持するどこかにファイルがあります。レーキを開始する前に、そのファイルからPIDを読み、プロセスが実行されているかどうかを確認します。そうでない場合は、Rakeを起動し、PIDをPIDファイルに書き込みます。レーキが存在する場合は、PIDファイルを削除します。本当に厳格にしたい場合は、これをPIDファイルのロックと組み合わせる必要がありますが、これは特定の状況に依存します。

他のヒント

私はそれが便利だと思うので、私はここに残します:

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

必要なのは名前の宝石だけです ピドファイル.

これをgemfileに追加します:

gem 'pidfile', '>= 0.3.0'

タスクは次のとおりです。

desc "my task"
task :my_task do |t|
  PidFile.new(piddir: "/var/lock", pidfile: "#{t.name}.pid")
  # do something
end
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top