원래 StackOverflow 에서이 질문을했습니다. 그런 다음 이것이 더 좋은 곳이라는 것을 깨달았습니다.
delayed_job 프로세스를 모니터링하기 위해 블루 필 설정이 있습니다. (Ruby On Rails 애플리케이션)
우분투 사용하기 12.10.
우분투를 사용하여 블루 필 서비스 자체를 시작하고 모니터링하고 upstart
있습니다. 내 시작 구성이 아래에 있습니다 ( /etc/init/bluepill.conf
).
description "Start up the bluepill service"
start on runlevel [2]
stop on runlevel [016]
expect daemon
exec sudo /home/deploy/.rvm/wrappers/<app_name>/bluepill load /home/deploy/websites/<app_name>/current/config/server/staging/delayed_job.bluepill
# Restart the process if it dies with a signal
# or exit code not given by the 'normal exit' stanza.
respawn
나는 또한 expect fork
대신에 시도했다 expect daemon
. 또한 expect...
줄을 완전히 제거하려고했습니다 .
기계가 부팅되면 블루 필이 정상적으로 시작됩니다.
$ ps aux | grep blue
root 1154 0.6 0.8 206416 17372 ? Sl 21:19 0:00 bluepilld: <app_name>
여기서 bluepill 프로세스의 PID는 1154입니다. 그러나 upstart
잘못된 PID를 추적하는 것 같습니다. 존재하지 않는 PID를 추적하고 있습니다.
$ initctl status bluepill
bluepill start/running, process 990
sudo
블루 필 프로세스를 시작한 프로세스 의 PID를 추적하고 있다고 생각합니다 .
를 사용하여 bluepill을 강제 종료하면 bluepill 프로세스가 다시 생성되지 않습니다 kill -9
.
또한 잘못된 PID가 추적되어 재부팅 / 종료 만 중단되고 매번 시스템을 하드 리셋해야한다고 생각합니다.
여기서 무엇이 문제가 될 수 있습니까?
업데이트 :
문제는 오늘 (2015 년 5 월 3 일) 우분투 14.04.2에서 유지됩니다.
문제는 sudo를 사용하기 때문이 아닙니다. 더 이상 sudo를 사용하지 않습니다. 업데이트 된 upstart 구성은 다음과 같습니다.
description "Start up the bluepill service"
start on runlevel [2]
stop on runlevel [016]
# Restart the process if it dies with a signal
# or exit code not given by the 'normal exit' stanza.
respawn
# Give up if restart occurs 10 times in 90 seconds.
respawn limit 10 90
expect daemon
script
shared_path=/home/deploy/websites/some_app/shared
bluepill load $shared_path/config/delayed_job.bluepill
end script
머신이 부팅되면 프로그램이 정상적으로로드됩니다. 그러나 upstart는 위에서 설명한 것처럼 여전히 잘못된 PID를 추적합니다.
주석에 언급 된 해결 방법으로 인해 중단 문제가 해결 될 수 있습니다. 그래도 시도하지 않았습니다.
ps aux | grep 990
그것을해야하지만pstree 990
더 유익 할 수 있습니다.