我有一个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'
这是相当乏味的,应该自动化。我最近遇到了这个解决方案,它提供了我所寻找的东西。一个 cronjob 每隔几分钟运行以下 bash 脚本:
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
针对不同的实例进行单独的会话。
答案1
做一个服务。放
[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
还要实现错误处理,以便脚本不会崩溃。