crontab を使用して、たとえば 3 時間ごとに rake タスクを呼び出します。
crontab が rake タスクを実行する準備ができたら、rake タスクが実行されていることを確認できるようにしたいと考えています。その場合は実行しないでください。
これを行う方法。ありがとう。
便利だと思うので、ここに残しておきます。
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
これにはロックファイルを使用できます。タスクが実行されたら、ロックを取得して、ロックを取得した場合はrakeタスクを実行してみてください。ロックを取得できない場合は、レーキを実行しないでください。エラーや警告をどこかに記録したい場合もあります。そうしないと、レーキタスクが何週間も何ヶ月も何もしないことになってしまう可能性があります。rakeが終了したら、ロックファイルのロックを解除します。
RAAのようなものが役立つかもしれませんが、私はそれを使用したことがないので、多分そうではありません。
PIDファイルを使用することもできます。rakeプロセスのプロセスIDを保持するファイルがどこかにあります。rakeを開始する前に、そのファイルからPIDを読み取り、プロセスが実行されているかどうかを確認します。そうでない場合は、rakeを起動し、そのPIDをPIDファイルに書き込みます。rakeが存在する場合は、PIDファイルを削除します。本当に厳密にしたい場合は、これをPIDファイルのロックと組み合わせたいと思いますが、これは特定の状況によって異なります。
All you need is a gem named pidfile.
Add this to your Gemfile:
gem 'pidfile', '>= 0.3.0'
And the task could be:
desc "my task"
task :my_task do |t|
PidFile.new(piddir: "/var/lock", pidfile: "#{t.name}.pid")
# do something
end