我有我的python腳本設置爲從Ubuntu服務器中的cron運行。但是,在另一個cron事件嘗試啓動之前,可能需要更長時間才能完成。我想從腳本本身確定這種情況,如果正在運行,然後從python腳本中正常終止它。如何確定我的python腳本是否正在運行?
1
A
回答
0
有兩個明顯的解決方案:
一些類型的鎖文件,此檢查。如果鎖定文件存在,則不要啓動,否則請創建它。 (或者更恰當地說,在真正的Python中'請求原諒,不允許'的風格,試着做出來,並在錯誤存在的情況下抓住錯誤 - 停止競爭條件)。當腳本結束時,您需要小心以確保清除乾淨 - 即使出現錯誤,也可能會阻止未來的運行。傳統上,這是一個
.pid
文件,其中包含正在運行的進程的進程ID。使用
ps
檢查運行過程。但是,通過這種解決方案,阻止競賽狀況變得更加困難。
1
將您的pid保存到文件;如果該文件已經存在,請檢查保留其PID的進程是否仍然存在。 (這比試圖確保你更安全總是刪除文件:你不能)。整個過程如下所示:
檢查檢查點文件是否存在。如果沒有,請將您的PID寫入文件並繼續進行計算。
如果文件存在:讀取PID並檢查進程是否實際上仍然存在。最好的方法是使用「kill -0」(來自python:os.kill),它不會影響正在運行的進程,但如果它不存在則會失敗。如果進程仍在運行,請退出。否則,請將您的PID寫入文件等。
存在競爭條件的小概率,但是如果您的進程以不頻繁的間隔重新啓動,那應該完全無害:您的進程可能總是退出以支持運行過程稍後退出,那麼如果正在運行的進程首先退出,那麼它有什麼關係?
0
一個簡單而有效的解決辦法是做這樣的事情在你的crontab條目:
ps -C myscript.py > /dev/null || /path/to/myscript.py
相關問題
- 1. 如何檢測我的新貴腳本是否正在運行?
- 2. 確定腳本是否正在運行隱藏
- 3. 如何確定我運行的PHP腳本是否是mod_rewrite指向的結果?
- 4. 是我的bash腳本是否正確?
- 5. 如何驗證電子郵件腳本是否正確運行?
- 6. 如何使用wsadmin Jython腳本確定應用程序是否正在運行?
- 7. 如何確定Python腳本運行的操作系統是否類Unix?
- 8. 如何確定shell腳本是否以root權限運行?
- 9. 這是在Python中運行shell腳本的正確方法嗎?
- 10. 如何確定是否從crontab執行python腳本?
- 11. Python,確定Unix進程是否正在運行的正確方法是什麼?
- 12. python:檢查IP地址是否正在運行的腳本
- 13. 確定腳本是否在RStudio筆記本中運行
- 14. 確定進程是否正在運行?
- 15. 確定作業是否正在運行
- 16. 在腳本運行期間正確鎖定我的數據庫
- 17. 如何知道正在運行的腳本是否死亡?
- 18. 我是否正確使用此腳本?
- 19. 如何確定我的腳本在哪個頁面上運行
- 20. 檢查是否python腳本運行
- 21. 我的shell腳本如何確定它是否在真正的shell中?
- 22. 如何從腳本本身檢查腳本是否正在運行?
- 23. 如何從另一個腳本運行python腳本時獲得正確的exitcode?
- 24. 如何檢查python腳本(test.py)是否在Windows 10上運行
- 25. 確定腳本是否在SGE中運行
- 26. 確定腳本是否在pythonw中運行?
- 27. Node.js - 如何檢測節點腳本是否正在運行?
- 28. 如何檢查Powershell腳本是否正在遠程運行
- 29. 如何知道bash腳本是否正在運行nohup?
- 30. 檢測我如何運行Python腳本
我不知道你需要究竟是什麼,但'ps'命令可能會有所幫助。這是關於某人的[博客文章](http://andreinc.net/2010/11/07/how-to-get-the-active-process-list-on-a-linux-machine-using-python/)使用'subprocess'來調用'ps'並解析其輸出。通過[類似的問題](http://stackoverflow.com/questions/2703640/process-list-on-linux-via-python) – 2012-03-04 14:41:13
在運行時將pid文件寫入磁盤,並在文件終止時將其刪除。如果文件存在,它仍然在運行(或非正常退出)。這就是有多少Unix工具通知另一個實例正在運行。 – 2012-03-04 14:42:57
@Michael它只是普通文件嗎? – Pablo 2012-03-04 14:44:02