2011-01-04 24 views
13

私はスケジューラー(Rufusスケジューラー)を使って、毎分 "ar_sendmail"(ARmailerから)というプロセスを起動します。Rubyで実行中のプロセスを確認する方法は?

メモリを浪費しないようにプロセスが既に実行されている場合、プロセスを起動しないでください。

このプロセスが既に実行されているかどうかを確認するにはどうすればよいですか?以下のunlessの後ろには何がありますか?

scheduler = Rufus::Scheduler.start_new 

    scheduler.every '1m' do 

    unless #[what goes here?] 
     fork { exec "ar_sendmail -o" } 
     Process.wait 
    end 

    end 

end 

答えて

23
unless `ps aux | grep ar_sendmai[l]` != "" 
+0

ありがとう! 1質問の背中:なぜ "ar_sendmail"の "l"のまわりの角かっこ? – TomDogg

+8

これはar_sendmailと一致するプロセスのためにgrepから呼び出しプロセスを削除することです - そうでなければ 'grep ar_sendmail'の結果を得るでしょう – stef

+0

Muchas gracias、señor! – TomDogg

8
unless `pgrep -f ar_sendmail`.split("\n") != [Process.pid.to_s] 
+1

私はこれを呼び出すプロセスを除外するためにブラケットを使用する必要がないので、はるかに良い解決策だと思います。 – while

+0

編集:pgrepのリターン構造のため、\ nの分割が必要でした。 – dahlberg

関連する問題