質問

スケジューラ(Rufusスケジューラ)を使用して、「AR_SENDMail」(Armailerから)というプロセスを毎分起動します。

メモリを食べないように、そのようなプロセスがすでに実行されている場合、プロセスを起動しないでください。

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

scheduler = Rufus::Scheduler.start_new

  scheduler.every '1m' do

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

  end

end
役に立ちましたか?

解決

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

他のヒント

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

これは私が思うよりきちんとしたように見え、組み込みのRubyモジュールを使用しています。 0キル信号を送信します(つまり、殺しないでください):

  # Check if a process is running
  def running?(pid)
    Process.kill(0, pid)
    true
  rescue Errno::ESRCH
    false
  rescue Errno::EPERM
    true
  end

からわずかに修正されています 簡単な開発のヒント Epermを救出したくないかもしれません。つまり、「走っていますが、殺すことは許可されていません」。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top