さまざまなパラメータを使用して複数のインスタンスで実行される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
また、スクリプトが競合しないようにエラー処理を実装してください。