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 

또한 스크립트가 충돌하지 않도록 오류 처리를 구현하십시오.

관련 정보