在我的帶有 ubuntu 20.04 的樹莓派設備上,當我在檔案夾 /home/okay 中重新啟動設備后手動運行 start.py 代碼時
python3 start.py
兩個腳本一個接一個地運行。但是當我把這段代碼放在 crontab 中的@reboot 中時,
@reboot sleep 300 && python3 /home/okay/start.py
只有第一個腳本運行,第二個不運行。
py腳本如下
import os
os.system ("python3 /home/okay/avadot.py & ")
os.system ("python3 /home/okay/main.py &")
我用 os.system 撰寫代碼的原因是,兩個 py 檔案都運行一段時間 True: 每 10 分鐘回圈一次。因此,一個完成后不能啟動另一個,兩者必須同時開始作業。
uj5u.com熱心網友回復:
cron使用 Python 完成這項作業似乎沒有多大意義。
os.system("cmd &")將cmd作為它生成的 shell 的后臺作業運行,但 shell 將一直掛起,直到后臺作業完成。您可以通過多種方式分離,但最簡單的解決方案是從同一個 shell 運行這兩個作業,而根本不使用 Python。
#!/bin/sh
python3 /home/okay/avadot.py &
python3 /home/okay/main.py &
如果你非常想多花一個行程,你可以從 Python 運行它:
import subprocess
subprocess.run("""
python3 /home/okay/avadot.py &
python3 /home/okay/main.py &
""", shell=True, check=True)
或重構您的代碼,以便您可以import使用這兩個腳本并使用multiprocessing.
回到更簡單的建議,您可以從一項cron作業啟動兩個流程
@reboot sleep 300 && python /home/okay/avadot.py & python3 /home/okay/main.py &
但cron已經在后臺運行,所以你可以把它分成
@reboot sleep 300 && python /home/okay/avadot.py
@reboot sleep 300 && python /home/okay/main.py
可能會有其他并發癥;一個常見的初學者難題是嘗試運行需要圖形顯示或用戶互動的工具,當然這些工具根本無法輕松獲得cron。或許可以查看CronJob not running以獲取更多資訊和故障排除提示。
uj5u.com熱心網友回復:
首先是 cron 需要您要使用的可執行檔案的完整路徑。
您可以使用command -v <cmd>.
我猜你正在尋找類似的東西
@reboot /usr/bin/sleep 300 && /usr/bin/python3 /home/okay/start.py
然后,您撰寫的腳本運行子行程。如果您查看 的檔案os.system(),您可以閱讀:
該
subprocess模塊提供了更強大的工具來生成新行程并檢索其結果;使用該模塊優于使用此功能。有關一些有用的秘訣,請參閱檔案中的用子流程模塊替換舊功能部分。subprocess
所以你可能應該這樣做:
import subprocess
subprocess.Popen(["python3", "/home/okay/avadot.py"])
subprocess.Popen(["python3", "/home/okay/main.py"])
這將啟動兩個行程,但請注意,啟動行程并且沒有終止它們的計劃是一個壞主意(請參閱Popen.wait()或Popen.poll())。
uj5u.com熱心網友回復:
也許這行得通
import subprocess
subprocess.call('reboot sleep 300 && python3 /home/okay/start.py', shell=True)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/492911.html
