Почему моя служба upstart не запускается при загрузке системы?

Почему моя служба upstart не запускается при загрузке системы?

Продолжая отэтот вопрос, я написал простую стартовую службу (/etc/init/pms.conf) для моего безголового сервера Ubuntu Server 11.04 следующим образом:

start on filesystem and net-device-up IFACE=eth0
stop on runlevel [016]
respawn

exec /home/administrator/pms-current/PMS.sh

Я могу запустить (или остановить) эту службу по своему желанию из командной строки:

service pms start

И я вижу, что он действительно работает.

Однако, когда я впервые загружаю свою машину, служба не запускается. Если я подключаюсь по SSH и проверяю статус службы, я получаю:

$ service pms status
pms stop/waiting

Мой вопрос: почему это происходит? Почему моя служба не запускается при загрузке?

ОБНОВЛЕНИЕ 1: не уверенный, запускалась ли моя служба и впоследствии умирала или просто не запускалась вообще, я добавил следующее в PMS.sh:

echo "STARTED" > $STARTLOG

Это, очевидно, просто дает мнечто-нибудьискать. Я проверил это, запустив службу самостоятельно, а затем проверивстарт.журнал. Затем я удалилстарт.журнали перезагрузился. После перезапуска его там не было, так что похоже, что upstart определенно не запускает мою службу. Полагаю, он мог умереть на более раннем этапе процесса, но это кажется маловероятным, учитывая простоту всего этого.

ОБНОВЛЕНИЕ 2: Я только что обновился до версии 11.10, которая включает обновление Upstart, но эта проблема все еще возникает.

ОБНОВЛЕНИЕ 3: Как и просили, я загрузился с --debug. Вывод cat /var/log/syslog | grep initслишком длинный, чтобы поместить его в вопрос, но вы просмотрите егоздесь.

ОБНОВЛЕНИЕ 4: Еще больше логов, на этот раз upstart conf включен в начало.Пробег 1изабег 2.

решение1

Я бы рекомендовал увеличить детализацию задания, например, используя предстартовые/послестартовые записи.

pre-start script
  logger "pre-start for myprog"
end script

post-start script
  logger "post-start for myprog"
end script

# and for PMS itself:
script
  logger "just before executing PMS"
  exec /home/administrator/pms-current/PMS.sh
end script

Дополнительная информация наhttp://upstart.ubuntu.com/cookbook/

Также посмотритеhttp://upstart.ubuntu.com/wiki/Отладка

решение2

Вероятно, здесь происходит то, что pms запускается до того, как запускаются ваши сетевые адаптеры, и, вероятно, даже до того, как запускается адаптер loopback (lo). Если предположить, что мы говорим о PS3 Media Server, то это сетевая служба, и ей, вероятно, не нравится запускаться без доступных интерфейсов.

Попробуйте изменить начальные критерии на:

start on filesystem and net-device-up IFACE!=lo

То есть, запустите после того, как будет запущен любой "реальный" сетевой интерфейс. Однако это может быть неидеально, если следующим интерфейсом будет eth0, PMS запустится, но вы действительно хотите, чтобы PMS использовал wlan0, так не получится. Служба запустится, но она, возможно, не сможет выбрать интерфейс, который вы хотели бы прослушивать. Предполагая, что вы знаете интерфейс, через который собираетесь транслировать, и он не будет меняться, я бы жестко закодировал это в задании, например:

start on filesystem and net-device-up IFACE=wlan0

В Oneiric (11.10) вы можете использовать событие static-network-upдля ожидания всех статически настроенных устройств. Что хорошо, потому что позволяет вам писать сетевые задания без жесткого кодирования интерфейса. [Примечание: под «всеми статически настроенными устройствами» я подразумеваю использование /etc/network/interfacesвместо NetworkManager. Это не означает статический в смысле статического IP против DHCP.]

решение3

Изучив ваш системный журнал, можно увидеть, что процесс pms запускается без ошибок, но затем через некоторое время его цель меняется с start на stop, что означает его завершение.

Это немного странно, потому что вы добавили пункт repsawn, поэтому он должен попытаться снова запуститься после остановки, но этого не происходит. Так что я предполагаю, что вы удалили пункт respawn.

Между запуском и остановкой службы pms запущены только 2 службы: ufw и сетевой интерфейс (eth0), и 1 — udev-fallback-graphics.

Кажется, что ваш процесс pms запускается параллельно. К сожалению, документация upstart немного туманна относительно точных различий между start on ...vanilla и start on starting ...и start on started ....

Попробуйте изменить стартовую строфу на

start on started networking

или просто слишком

start on net-device-up IFACE=eth0

Вывод журнала немного странный, так как событие net-device-up происходит намного позже, но pms запускается раньше него.

Это должно гарантировать, что ваш процесс запустится только один раз.всеНастройка сети завершена, т.е. работа не только началась, но и завершена.

Также не доверяйте полностью выводу журнала, на ранних этапах процесса загрузки вывод журнала в любой файл не всегда работает. Смотрите ответ вОтладка Upstart

решение4

У меня была такая же проблема и в конце концов я ее решилпростос:

start on runlevel [2345]

без net-device-upвсяких started networkingвещей

Это полный скрипт upstart, и он работает отлично:

# MyApp

description     "MyApp"
author          "me"

start on runlevel [2345]
stop on runlevel [016]

respawn

exec /usr/bin/myapp 2>> /var/logs/myapp.log

Связанный контент