コマンドを実行し、結果の pid を pidfile にパイプするにはどうすればよいですか?
UNIXのコマンドを探しているのですが、Rubyでできる方法があればそれもいいですね。
私は試した:
bundle exec clockwork clock_local.rb echo $! > #{current_path}/tmp/pids/clockwork.pid
pid だけでなく、出力全体を pidfile にパイプするようです。
Ruby のBEGIN {...}
andEND {...}
を使用して、PID ファイルを自動的に作成および削除できます。これらを Ruby スクリプトに追加します。
BEGIN { File.write("#{ $0 }.pid", $$) }
END { File.delete("#{ $0 }.pid") }
次のような単純なスクリプトを使用して、単純な PID ファイルを作成することをテストできます。
BEGIN { File.write("#{ $0 }.pid", $$) }
END { File.delete("#{ $0 }.pid") }
sleep 60
それを実行し、実行中に pid ファイルのディレクトリを確認します。1 分後、sleep
有効期限が切れると、PID ファイルは自動的に消えます。
ファイルが書き込み可能でない場合、またはファイルが既に存在してロックされている場合、それらは例外処理を行いません。スクリプトが+をEND
受け取ると起動し、PID ファイルを自動的に削除します。CNTRLC
追加したい追加事項は、既存の PID ファイルのテストであり、作成後にファイルをロックして上書きできないようにします。これは、排他ロックでファイルを開いたままにしておくことで実行できます (「参考文献」を参照flock
)。
コマンドをバックグラウンドで実行すると、pid を保存できます。
bundle exec clockwork clock_local.rb & echo $! > tmp/pids/clockwork.pid