서버 시작 시 Upstart 스크립트 실행 문제

서버 시작 시 Upstart 스크립트 실행 문제

다음 코드를 사용하는 Upstart 스크립트가 있습니다.

start on runlevel [2345]
stop on runlevel [!2345]

respawn

env PYTHONPATH=$PYTHONPATH:/opt/lrms/lib/python2.6/site-packages

exec python /opt/foo_service/src/foo/foo.py >> /var/log/foo.log 2>&1

pre-start script
echo "[`date`] - Starting Foo Service..." >> /var/log/foo.log
end script

pre-stop script
echo "[`date`] - Stopping Foo Service..." >> /var/log/foo.log
end script

post-stop script
echo "[`date`] - Post-Stop Stanza..." >> /var/log/foo.log
end script

start foo또는 를 사용하여 쉽게 서비스를 시작하고 중지할 수 있습니다 stop foo. 그런데 서버를 재시작하고 서비스 상태를 확인해 보니 stop/waiting.

그런 다음 로그를 확인하고 다음을 확인했습니다(시작 중에 이 시작 스크립트에 대해 발생하는 이벤트입니다).

[Mon Aug 22 12:20:34 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:35 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:35 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:35 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:35 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:35 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:35 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:36 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:36 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:36 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:36 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:36 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:36 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:36 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:36 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:36 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:36 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:37 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:37 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:37 EDT 2016] - Post-Stop Stanza...
[Mon Aug 22 12:20:37 EDT 2016] - Starting Foo Service...
[Mon Aug 22 12:20:37 EDT 2016] - Post-Stop Stanza...

나에게 이는 중지 전 섹션이 실행되지 않고 여러 번 다시 생성된다는 점을 고려하면 upstart 스크립트가 충돌하고 있음을 의미합니다.

다음 추측은 Python 스크립트가 upstart 스크립트가 시작될 때 현재 실행되고 있지 않은 것에 의존할 수 있다는 것입니다. Python 서비스는 ActiveMQ에서 이벤트를 캡처하여 MySQL에 저장합니다. MySQL이 준비되었을 때 실행되도록 Upstart 스크립트를 편집하려고 시도했지만 로그 파일에 아무 것도 출력되지 않습니다.

실행 중인 다른 서비스에 따라 이것이 Python 서비스에 문제가 될 수 있다고 가정하는 것이 맞습니까? 이 문제를 어떻게 디버깅해야 합니까?

답변1

나는 해결책을 알아냈다. 내 Python 스크립트는 MySQL initctl emit mysql-started에 의존하므로 /etc/init.d/mysqld.

start on started mysql-started그런 다음 내 신생 스크립트에서 대신 사용할 수 있습니다 start on runlevel [2345].

관련 정보