如何運行命令並將生成的pid傳送到pidfile中?如何運行系統命令,並將PID傳遞給pidfile?
我正在尋找一個UNIX命令,但是如果有一種方法可以在Ruby中完成,那也不錯。
我想:
bundle exec clockwork clock_local.rb echo $! > #{current_path}/tmp/pids/clockwork.pid
,似乎管整個輸出到pidfile進程文件,而不僅僅是PID。
如何運行命令並將生成的pid傳送到pidfile中?如何運行系統命令,並將PID傳遞給pidfile?
我正在尋找一個UNIX命令,但是如果有一種方法可以在Ruby中完成,那也不錯。
我想:
bundle exec clockwork clock_local.rb echo $! > #{current_path}/tmp/pids/clockwork.pid
,似乎管整個輸出到pidfile進程文件,而不僅僅是PID。
您可以使用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
) 。
如果你運行該命令在後臺可以再存儲PID:
bundle exec clockwork clock_local.rb & echo $! > tmp/pids/clockwork.pid