Shell-Script

在 tmux 會話中保持執行參數的 Python 腳本,如果崩潰則重新啟動

  • June 18, 2020

我有一個 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 

還要實現錯誤處理,以便腳本不會崩潰。

引用自:https://unix.stackexchange.com/questions/593713