0

コマンドを実行し、結果の pid を pidfile にパイプするにはどうすればよいですか?

UNIXのコマンドを探しているのですが、Rubyでできる方法があればそれもいいですね。

私は試した:

bundle exec clockwork clock_local.rb echo $! > #{current_path}/tmp/pids/clockwork.pid

pid だけでなく、出力全体を pidfile にパイプするようです。

4

2 に答える 2

7

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)。

于 2013-04-20T03:45:58.100 に答える
2

コマンドをバックグラウンドで実行すると、pid を保存できます。

bundle exec clockwork clock_local.rb & echo $! > tmp/pids/clockwork.pid
于 2013-04-20T02:25:54.083 に答える