Как проверить работу с Ruby?

Я использую планировщик (планировщик 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

Ответ 1

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

Ответ 2

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

Ответ 3

Это выглядит аккуратно, я думаю, и использует встроенный модуль 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, что означает "он работает, но вы не можете его убить".