2011-01-04 10 views
13

Używam harmonogramu (harmonogramu Rufusa), aby uruchomić proces zwany "ar_sendmail" (z ARmailera), co minutę.Jak sprawdzić uruchomiony proces z Ruby?

Proces NIE powinien być uruchamiany, gdy jest już uruchomiony taki proces, aby nie zużywać pamięci.

Jak sprawdzić, czy ten proces już działa? Co się dzieje po unless poniżej?

scheduler = Rufus::Scheduler.start_new 

    scheduler.every '1m' do 

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

    end 

end 

Odpowiedz

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

Dzięki! 1 pytanie z powrotem: Dlaczego nawiasy wokół "l" z "ar_sendmail"? – TomDogg

+8

to usunięcie wywołującego procesu z grep dla procesu, który pasuje do ar_sendmail - w przeciwnym razie uzyskasz wynik dla 'grep ar_sendmail' – stef

+0

Muchas gracias, señor! – TomDogg

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

Myślę, że jest to o wiele lepsze rozwiązanie, ponieważ nie trzeba używać funkcji nawiasów, aby wykluczyć proces wywoływania. – while

+0

EDYCJA: Potrzebował podziału na \ n ze względu na strukturę powrotu pgrep. – dahlberg

Powiązane problemy