![tmux 세션에서 인수를 사용하여 Python 스크립트를 계속 실행하고 충돌이 발생하면 다시 시작하세요.](https://linux55.com/image/175486/tmux%20%EC%84%B8%EC%85%98%EC%97%90%EC%84%9C%20%EC%9D%B8%EC%88%98%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20Python%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EA%B3%84%EC%86%8D%20%EC%8B%A4%ED%96%89%ED%95%98%EA%B3%A0%20%EC%B6%A9%EB%8F%8C%EC%9D%B4%20%EB%B0%9C%EC%83%9D%ED%95%98%EB%A9%B4%20%EB%8B%A4%EC%8B%9C%20%EC%8B%9C%EC%9E%91%ED%95%98%EC%84%B8%EC%9A%94..png)
다양한 매개변수를 사용하여 여러 인스턴스에서 실행되는 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
또한 스크립트가 충돌하지 않도록 오류 처리를 구현하십시오.