一度にプロセスのみを実行するレイクタスクを確保する方法
質問
クロンタブを使用して、たとえばレーキタスクを呼び出します: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
所属していません StackOverflow