Shell-Script
在 tmux 會話中保持執行參數的 Python 腳本,如果崩潰則重新啟動
我有一個 Python 腳本,它在具有不同參數的多個實例中執行,例如:
python3 proc.py -s -v -l proc_one.log python3 proc.py -c -v -l proc_two.log
我通常在啟動
tmux
時使用腳本在會話中啟動這些並手動檢查這些,如果它們崩潰則重新啟動。tmux new-session -d -s proct 'cd /opt/proct/ && python3 proc.py -s -v -l proc_one.log; bash' tmux split-window -t proct 'cd /opt/proct/ && python3 proc.py -c -v -l proc_two.log; bash'
這是相當乏味的,應該是自動化的。我最近遇到了這個解決方案,它提供了我正在尋找的東西。每隔幾分鐘執行以下 bash 腳本的 cronjob:
if [[ ! $(pgrep -f '^python3 proc.py -s -v -l proc_one.log') ]]; then python3 proc.py -s -v -l proc_one.log fi
雖然這將使我的腳本繼續執行,但它也會阻止我對程序進行檢查。
我的問題是,如何讓腳本檢查我的程序是否正在執行,就像上面的那樣,但如果它沒有執行,請在
tmux
會話中啟動它。我不介意tmux
針對不同實例進行單獨的會話。
做一個服務。放
[Unit] Description=ProcOfMine After=network-online.target [Service] ExecStart=python proc.py --args ok Restart=always [Install] WantedBy=multi-user.target
在
/lib/systemd/system/proc.service
還要實現錯誤處理,以便腳本不會崩潰。