在 tmux 会话中保持带有参数的 Python 脚本运行,如果崩溃则重新启动

在 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'

这是相当乏味的,应该自动化。我最近遇到了这个解决方案,它提供了我所寻找的东西。一个 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 

还要实现错误处理,以便脚本不会崩溃。

相关内容