Исходя из этого вопроса , я написал простой сервис 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
Это, очевидно, просто дает мне что-то искать. Я проверил это, запустив службу сам, а затем проверив start.log . Затем я удалил start.log и перезагрузил компьютер. После перезагрузки его там не было, поэтому кажется, что выскочка определенно не запускает мой сервис. Я полагаю, что он мог умереть на более раннем этапе процесса, но это кажется довольно маловероятным, учитывая простоту всего этого.
ОБНОВЛЕНИЕ 2 : Я только что обновил до 11.10, который включает в себя обновление upstart, но эта проблема все еще возникает.
ОБНОВЛЕНИЕ 3 : По запросу я загрузился с --debug
. Вывод cat /var/log/syslog | grep init
слишком длинный, чтобы поместить его в вопрос, но вы смотрите его здесь .
ОБНОВЛЕНИЕ 4 : Больше журналов, на этот раз конф выскочка включен в верхней части. Беги 1 и беги 2 .
cat /var/log/syslog | grep init
после включения загрузки журнала для upstart с помощью инструкций в Upstart DebuggingОтветы:
Я бы порекомендовал увеличить детализацию задания, например, с помощью записей до и после запуска.
Дополнительная информация на http://upstart.ubuntu.com/cookbook/
Также посмотрите на http://upstart.ubuntu.com/wiki/Debugging
источник
Вероятно, здесь происходит то, что pms запускается до того, как появятся ваши сетевые адаптеры, и, возможно, даже до появления петлевого адаптера (вот так). Предполагая, что мы говорим о PS3 Media Server, это сетевой сервис, и он, вероятно, не любит запускаться без доступных интерфейсов.
Попробуйте изменить старт по критериям:
Это означает, что запуск после любого "реального" сетевого интерфейса. Тем не менее, это может быть не идеально, если eth0 - следующий интерфейс, запускается PMS, но вы действительно хотите, чтобы PMS использовал wlan0, но это не сработает. Служба запустится, но, возможно, ей не удастся выбрать интерфейс, который вы хотите прослушивать. Предполагая, что вы знаете интерфейс, через который вы собираетесь передавать данные, и он не изменится, я бы жестко запрограммировал его на работу, например:
В Oneiric (11.10) вы можете использовать событие
static-network-up
для ожидания всех статически настроенных устройств. Что приятно, потому что позволяет писать сетевые задания без жесткого программирования интерфейса. [Примечание: под «всеми статически настроенными устройствами» я имею в виду использование/etc/network/interfaces
вместо NetworkManager. Это не означает статический в смысле статического IP против DHCP.]источник
lo
и ,eth0
но я использовал свое второе предложение:start on filesystem and net-device-up IFACE=eth0
. Все равно не идет после перезагрузки. Я только что заметил кое-что в журнале PMS, которое может быть лидером. Я расследую и вернусь ...sleep 10
вставить - или выше - в «сценарий предварительного запуска» перед выполнением сценария оболочки.После изучения вашего системного журнала процесс pms начинается без ошибок, но затем через короткое время его цель меняется с начала на остановку, означая, что он убит.
Это немного странно, потому что вы добавили предложение repsawn, поэтому он должен попытаться начать снова после его остановки, но это не происходит. Я предполагаю, что вы удалили пункт о респауне.
Между запуском и остановкой службы pms запускаются только 2 службы ufw и сетевой интерфейс (eth0), а 1 запускается udev-fallback-graphics.
Кажется, что вы обрабатываете pms запускается параллельно. К сожалению, выскочка документации немного туманна относительно точных различий между
start on ...
vanilla иstart on starting ...
andstart on started ...
.Попробуйте изменить свой стартовый раздел на
или просто слишком
Вывод журнала немного странный, так как событие net-device-up наступает намного позже, но pms запускается раньше него.
Это должно гарантировать, что ваш процесс запускается только после того, как все настройки сети завершены, т.е. задание не только началось, но и завершилось.
Также не следует полностью доверять выводу журнала, в начале процесса загрузки вывод журнала в любой файл не всегда работает. Смотрите ответ в Отладка Upstart
источник
Удалось исправить подобную проблему, используя вместо этого start on runlevel:
источник
У меня была та же проблема, и в конце концов я решил ее просто :
start on runlevel [2345]
без каких-
net-device-up
либоstarted networking
вещейЭто полный сценарий выскочки, и он отлично работает:
источник
Я сталкивался
chkconfig
во время обучения RHCSA / CE:Вы можете проверить его справочную страницу Oneiric для более подробной информации о его возможностях.
источник
Я нашел решение для этого, но я не понимаю его. Если я перенесу PMS из-
/home/administrator
под/bin/pms
рута в качестве владельца, все будет работать нормально.Если я оставлю его под собой,
/home/administrator/
но убедитесь, что root является владельцем всего бара самого/home/administrator/
каталога, он все равно не будет работать.Если я назначу администратора всем владельцем и изменим соответствующую часть моего скрипта на:
Это все еще не работает.
Полагаю, сейчас я создам
/home/root/
каталог и перенесу туда все, хотя мне бы очень хотелось это полностью понять.источник
chkconfig
тоже не сработало? Вы пытались дать каталогPMS.sh
был в корень? Если работает только ваше решение, перейдите на страницу панели запуска Upstart и свяжитесь непосредственно с разработчиками..sh
то просто оставьте все там и отредактируйте скрипт так, чтобы он указывал на этот каталог (или, возможно, даже измените каталог?).У меня была похожая проблема «без запуска», когда я понял, что мой скрипт зависел от файла, который был у меня дома, а дом был недоступен, потому что был зашифрован с помощью стандартного механизма Ubuntu (.Private).
start on local-filesystems
событие (вероятно) генерируется до завершения процесса расшифровки.источник
Ваш домашний каталог на NFS? Иногда root не может получить доступ к NFS.
Для справки, в моем маленьком тесте только сейчас, 12.04:
start on started networking
иstart on network-interface-up INTERFACE=eth0
не работает, ноstart on started network-interface INTERFACE=eth0
делает.Спасибо http://os4.org/wiki/upstart.html за указание, которое
initctl list
всегда показывает работу сети как остановленную.источник
В моем случае сервис upstart зависел от скрипта, расположенного в папке vagrant synced . Решил проблему, используя следующую строку:
Более подробная информация: http://razius.com/articles/launching-services-after-vagrant-mount/
источник
Подобно @xuhcc, я пришел сюда, чтобы узнать, почему мой скрипт Vagrant Upstart не запускался. Следующее должно работать:
Но не в некоторых сборках из-за следующей ошибки.
https://github.com/mitchellh/vagrant/issues/6074
Обходной путь, указанный в отчете, отлично сработал для меня:
Отлично работал для меня
источник
это сработало для меня (мне нужно запустить сервис после iface up):
источник