crontab을 사용하여 프로세스를 모니터링하고 실행되지 않을 때 다시 시작하세요.

crontab을 사용하여 프로세스를 모니터링하고 실행되지 않을 때 다시 시작하세요.

나는 항상 계속 실행해야 하는 Python/JS 서버 콤보를 가지고 있습니다. Python 서버는 1GB RAM이 있는 서버에서 실행되기 때문에 쉽게 충돌합니다.

매분 실행되도록 crontab에 설정된 "monitor.sh"라는 스크립트를 작성했지만 Python 서버를 다시 시작하려고 할 때마다 실패하는 것 같습니다.

난 그게 달리고 있다는 걸 알아, 실행될 때마다 남겨진 타임스탬프를 통해 실행되고 있음을 확인할 수 있습니다.

모니터.sh

#!/bin/bash
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/var/www/site.com

echo "CHECKING" >> /var/www/site.com/monitor.log

pidof python3 >/dev/null
if [ $? -ne 0 ] ; then
  echo "Restarting Python App:  $(date)" >> /var/www/site.com/monitor.log
  screen -dmS python_server python3 /var/www/site.com/app.py
fi

pidof nodejs >/dev/null
if [ $? -ne 0 ] ; then
  echo "Restarting Inferno Server:  $(date)" >> /var/www/site.com/monitor.log
  screen -dmS inferno_server nodejs /var/www/site.com/render_server.js
fi

예약 된 일들--( crontab -e일반 사용자의 경우)

* * * * * /var/www/site.com/monitor.sh

로그에 "Restarting Python App"이 표시되고 아무 일도 일어나지 않습니다. 출력을 기록하려고 시도하면 > out.txt 2> errors.txt결과가 나오지 않습니다.

지금까지 작동하지 않은 것:

  • 시스템 수준 crontab 사용
  • sudo를 사용하여 서버 실행
  • chmod +x모든 파일에 사용
  • chmod -R 755모든 파일에 사용
  • /usr/bin/python3직접 전화하다
  • os.chdir()Python 스크립트에서 사용

작동하는 것:

  • 애플리케이션을 수동으로 실행
  • 수동으로 스크립트 실행
  • 다른 Python 파일을 사용하여 스크립트 실행
  • 필요에 따라 다른 JS 서버를 모니터링하고 다시 호출합니다.

서버는 Gunicorn을 사용하는 Bottle.py의 인스턴스입니다.

여기서 실제로 무슨 일이 일어나고 있는지 알아낼 수 있는 방법이 있나요? 확인할 수 있는 로그 파일이 있습니까? 아니면 실제로 명령에서 오류를 가져오는 방법이 있습니까?

답변1

나는 이것이 당신이 요구하는 것이 아니라는 것을 알고 있지만 당신의 접근 방식이 너무 까다로워 보입니다. 화면이 스크립트에서 작동하도록 되어 있는지조차 확신할 수 없으며 지금은 이를 테스트할 컴퓨터가 없습니다.

Supervisord를 사용하여 서비스를 모니터링하고 다시 시작하는 것이 좋습니다.

답변2

Upstart 또는 Systemd를 사용하는 것이 좋습니다. 배포판 버전에 따라 Ubuntu/Debian/CentOS에는 사전 설치되어 있습니다. 이전 시스템에는 System V가 있습니다.

관련 정보