有沒有簡單的方法來判斷ruby腳本是否已經運行,然後適當地處理它?例如:我有一個名爲really_long_script.rb的腳本。我讓它每5分鐘運行一次。當它運行時,我想看看上一次運行是否仍在運行,然後停止執行第二個腳本。有任何想法嗎?確定ruby腳本是否已經運行
5
A
回答
9
的PS是那樣做,可能開放競爭條件的真正的窮人的方式。
傳統的Unix/Linux方式是將PID寫入文件(通常位於/ var/run),並檢查啓動時是否存在該文件。
例如pidfile位於/var/run/myscript.pid,那麼在運行程序之前,你會檢查它是否存在。有一些技巧可以避免使用O_EXCL(異步鎖定)來打開文件和符號鏈接的競爭條件。
但是不太可能,您應該嘗試編碼以通過在文件系統上使用原子操作來避免競爭條件。
爲了節省重新發明輪子,你可能想看看http://rubyforge.org/projects/pidify/
0
在bash:
if ps aux | grep really_long_script.rb | grep -vq grep
then
echo Script already running
else
ruby really_long_script.rb
fi
0
你或許應該還檢查過程實際上是運行的,所以如果你的腳本死亡,沒有自我整頓,它將運行下一次,而不是簡單地檢查 /var/run/foo.pid是否存在並退出。
0
Highlander
說明
,可以確保只有一個主腳本的實例在運行的瑰寶。 總之,只能有一個。
安裝
gem install highlander
簡介
require 'highlander' # This should be the -first- thing in your code.
# Your code here
同時,早在命令行上...
# First attempt, works. Assume it's running in the background.
ruby your_script.rb
# Second attempt while the first instance is still running, fails.
ruby your_script.rb # => RuntimeError
注
只簡單地要求漢蘭達寶石確保塔t該腳本只有一個實例 不能再次啓動。如果您嘗試再次啓動它 它會引發RuntimeError。
相關問題
- 1. 確定腳本已經啓動(如果是首次運行)
- 2. 確定是否PowerShell腳本已經點源
- 3. 附加並調試Linux上已經運行的Ruby腳本?
- 4. 檢查腳本是否已經在特定機器上運行過?
- 5. 檢查一個特定的Python腳本是否已經在運行
- 6. WordPress的運行腳本已經加載
- 7. 確定是否已經過去5秒
- 8. 確定過程是否已經死亡?
- 9. 確定腳本是否在RStudio筆記本中運行
- 10. 檢查magento是否已經運行cronjob
- 11. rake檢查是否已經運行
- 12. 檢查CountDown是否已經運行
- 13. 檢查cronjob是否已經運行
- 14. 仍然不確定運行的Ruby腳本正確的權限
- 15. PowerShell在腳本已經運行時的腳本錯誤
- 16. 如果它已經在運行,請不要運行python腳本
- 17. 在已經運行的MATLAB會話上運行MATLAB腳本
- 18. 並行運行Ruby腳本的正確方法是什麼?
- 19. 確定腳本是否在SGE中運行
- 20. 確定腳本是否在pythonw中運行?
- 21. 如何確定shell腳本是否以root權限運行?
- 22. 確定腳本是否正在運行隱藏
- 23. 如何確定我的python腳本是否正在運行?
- 24. Bash:檢查腳本是否已經在這臺計算機上運行
- 25. PHP:我該如何檢查一下php腳本是否已經運行?
- 26. 檢查是否所有的onload腳本都已經執行
- 27. 確定在MySQL數據庫中是否存在的行已經
- 28. 運行預腳本以確定是否應運行Jenkins矩陣作業
- 29. 是否可以確定SKStore Review Controller是否已經出現。
- 30. 確定已執行的腳本 - JSR 223