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

これにより、スクリプトは引き続き実行されますが、プロセスを確認できなくなります。


私の質問は、上記のようにプロセスが実行されていることを確認するスクリプトを取得する方法です。ただし、実行していない場合はセッションから始めてくださいtmuxtmux他のインスタンスに対して別々のセッションを持っていることには気にしません。

答え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 

また、スクリプトが競合しないようにエラー処理を実装してください。

関連情報