2013-04-20 38 views
0

如何運行命令並將生成的pid傳送到pidfile中?如何運行系統命令,並將PID傳遞給pidfile?

我正在尋找一個UNIX命令,但是如果有一種方法可以在Ruby中完成,那也不錯。

我想:

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

,似乎管整個輸出到pidfile進程文件,而不僅僅是PID。

回答

7

您可以使用Ruby的BEGIN {...}END {...}幫助自動創建和刪除文件的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文件。一分鐘後,當sleep到期時,PID文件應該自動消失。

如果文件不可寫,或者它已經存在並且被鎖定,那麼這些不做任何異常處理。 END如果腳本收到,將觸發CNTRL + C並自動刪除PID文件。

你想要添加的其他東西是對現有PID文件的測試,在創建後鎖定文件,以便它不能被覆蓋,這可以通過使用獨佔鎖來保持打開來完成(參見flock) 。

1

如果你運行該命令在後臺可以再存儲PID:

bundle exec clockwork clock_local.rb & echo $! > tmp/pids/clockwork.pid 
相關問題