Я спочатку задав це питання на StackOverflow. Тоді зрозумів, що це, мабуть, краще місце.
У мене є програма проконтролювання моніторингу моїх процесів відстроченої роботи. (Додаток Ruby On Rails)
Використання Ubuntu 12.10.
Я запускаю та контролюю саму службу креслення за допомогою Ubuntu 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>
PID процесу креслення тут 1154. Але, upstart
схоже, слідкує за неправильним PID. Він відстежує PID, який не існує.
$ initctl status bluepill
bluepill start/running, process 990
Я думаю, це відстеження PID sudo
процесу, який розпочав процес креслення.
Це запобігає відновленню процесу креслення, якщо я насильно вбиваю програму за допомогою kill -9
.
Більше того, я думаю, через те, що відслідковується неправильний PID, перезавантаження / відключення просто зависає, і мені доводиться щоразу ретельно скидати машину.
Що тут може бути проблемою?
ОНОВЛЕННЯ :
Проблема залишається на сьогодні (3 травня 2015 року) на Ubuntu 14.04.2.
Проблема полягає не у використанні судо. Я вже не користуюся судо. Моя оновлена конфігурація на початку:
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
Коли машина завантажується, програма завантажується. Але на початку все одно відстежується неправильний PID, як описано вище.
Вирішення проблеми, згадане в коментарях, може виправити неполадки. Я ще не пробував цього.
ps aux | grep 990
слід зробити це, алеpstree 990
може бути більш інформативним.