Чому моя система запуску не починається з завантаження системи?


37

Виходячи з цього питання , я написав просту послугу для початківців ( /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, що включає оновлення на початку, але ця проблема все ще виникає.

ОНОВЛЕННЯ 3 : За запитом, я завантажувався з --debug. Вихід кота /var/log/syslog | grep initзанадто довгий, щоб ставити питання, але ви його переглядаєте тут .

ОНОВЛЕННЯ 4 : Більше журналів, на цей раз конфід-конфірт включено вгорі. Виконати 1 і запустити 2 .


Ви впевнені, що сценарій не був виконаний? Повідомлення pms стоп / очікування означає, що завдання запуску запущено і що всі команди припиняються нормально.
влаштовуйте

Додайте висновок cat /var/log/syslog | grep initпісля включення завантажувального журналу для запуску, використовуючи інструкції на налагодженні Upstart
Ciaran Liedeman

@Anarci: дивіться оновлення 3 у моєму запитанні.
Kent Boogaart

Більшість користувачів не видаватимуть адресу електронної пошти, як це, а надають посилання на пастебін-сайт, такий як Ubuntu pastebin
Ciaran Liedeman

@Anarci: зроблено - дивіться, будь ласка, моє запитання.
Кент Богаарт

Відповіді:


19

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

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/Debugging


Це справді займається моєю головою. Я спробував десяток різних речей з задньої частини вашого посту. Усі помилки не змінювались, змінюючи незрозумілі повідомлення в журналах. Моя остання спроба призвела до того, що основний процес init: pms (1329) припинився зі статусом 143 , що для мене означає непотріб. Я бачу, що PMS.sh навіть не запускається, тому що перше, що він робить, - це записати у свій власний журнал, а запис у журнал відсутній. Я бачу свій вихідний запуск перед початком, який підказує мені, що цільовий файл існує та виконується. Я підберу це ще раз завтра, але якщо у вас є якісь ідеї, я хотів би їх почути. Спасибі.
Кент Бугаарт

привіт @KentBoogaart, у мене, здається, у тебе така ж проблема. Ви знайшли рішення?
Даніеле Б

@KentBoogaart У мене така ж проблема, як і у вас? Будь-яка удача з вашими?
Мевін Бабу

14

Тут, мабуть, відбувається те, що pms запускається до того, як з'являться ваші мережеві адаптери, і, можливо, ще до того, як навіть адаптер петлі (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.]


Це звучало як хитрість, але це не спрацювало. Я тільки loі , eth0але я використовував своє друге речення: start on filesystem and net-device-up IFACE=eth0. Досі не переходити після перезавантаження. Я щойно помітив у журналі PMS щось, що може бути ведучим. Я розслідую і повернусь ...
Кент Бугаарт

Це цікаво. Я не згадав одне, що я спробував ваш оригінальний сценарій, і він працював на завантаженні для моєї машини. Я приписував це лише удачі жеребкування (тобто в моєму перегоні, хороший автомобіль виграв, а у вашому поганий автомобіль виграв). Я дійсно не бачу, якої іншої залежності ми тут пропускаємо. Дивно.
Марк Рассел

2
Оскільки ви можете запустити його після завантаження, ми повинні бракувати ще одну залежність від служби. Один брудний злом, який може спрацювати (але зовсім не засвітить нас) - це просто sleep 10запустити (або вище) "сценарій перед запуском" перед виконанням сценарію оболонки.
Марк Рассел

Вибачте, Марк - але ми на одній сторінці. Я спробував заснути 10 річ уже в сценарії перед запуском. Не йдіть. Потім я спробував видалити debug.log взагалі та перезавантажився. Після завантаження у мене був такий самий статус сервісу, і жодного файлу debug.log не було, тому я не переконаний, що PMS взагалі працює. Чи є простий спосіб діагностувати це? Якщо я зміню PMS.sh, щоб виплюнути деякий вихід, куди він піде? Я гадаю, що я завжди міг би направити його на власний файл - я можу дати наступний знімок.
Kent Boogaart

Я щойно оновив своє запитання, щоб отримати більше інформації.
Кент Богаарт

3

Перевіряючи ваш syslog, процес pms починається без помилок, але потім через короткий час його мета змінюється від початку до зупинки, тобто вбивається.

Це трохи дивно, тому що ви додали застереження про повторне вкладення, тому воно повинно намагатися запуститися знову після його зупинки, але це ніколи не відбувається. Тож я здогадуюсь, що ви вилучили пункт про відновлення.

Між запуском та зупинкою служби pms запускаються лише 2 сервіси ufw та мережевий інтерфейс (eth0), а 1 запускається udev-backback-graphics.

Здається, що ви обробляєте pms паралельно. На жаль, початкова документація трохи туманна щодо точних відмінностей між start on ...ваніллю start on starting ...та start on started ....

Спробуйте змінити початкову строфу на

start on started networking

або просто теж

start on net-device-up IFACE=eth0

Вихід з журналу трохи дивний, оскільки подія підключення до мережевого пристрою настає набагато пізніше, але перед цим починається pms.

Це повинно гарантувати, що ваш процес розпочнеться лише після того, як всі налаштування мереж закінчені, тобто робота не тільки розпочалася, але й закінчена.

Також не довіряйте виходу журналу повністю, на початку процесу завантаження вихідний файл у будь-який файл не завжди працює. Дивіться відповідь у програмі Налагодження на початку


3

Вдалося виправити подібну проблему, скориставшись запуском на runlevel:

start on runlevel [2345]

3

У мене була така ж проблема, і врешті-решт я її вирішив просто :

start on runlevel [2345]

без якого - або net-device-upчи started networkingречей

Це повний сценарій на початку, і він прекрасно працює:

# MyApp

description     "MyApp"
author          "me"

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

respawn

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

1

Я зіткнувся chkconfigпід час мого навчання RHCSA / CE:

sudo apt-get install chkconfig
sudo chkconfig pms on

Ви можете перевірити, що це manir- сторінка Oneiric, щоб дізнатися більше про її можливості.


1

Я знайшов рішення для цього, але не розумію цього. Якщо я переїду PMS з /home/administratorі в /bin/pmsс коренем , як власник, все працює відмінно.

Якщо я залишу його під, /home/administrator/але переконайтеся, що root є власником всього бару самого /home/administrator/каталогу, він все ще не працює.

Якщо я встановлю адміністратора як власника всього і зміню відповідну частину мого сценарію на:

sudo su administrator -c '/home/administrator/pms-current/PMS.sh'

Це все ще не працює.

Я думаю, що зараз я зроблю /home/root/довідник і переміщу все туди, хоча дуже б хотів це повністю зрозуміти.


Тож chkconfigі не працювало? Чи спробували ви додати каталог PMS.shдо корінця? Якщо працює лише ваше рішення, перейдіть на сторінку Launchpad Upstart і зв’яжіться безпосередньо з розробниками.
Oxwivi

І якщо цього достатньо просто перемістити, .shтоді просто залиште все там і відредагуйте скрипт, щоб вказати на цей каталог (чи, можливо, навіть змінити каталог?).
Oxwivi

Так, я спробував зробити весь каталог PMS, що належить root. Імовірно, це не спрацювало, оскільки / home / administrator / не є root.
Kent Boogaart

Це все одно не має сенсу, я регулярно без проблем запускаю скрипти в моєму / домашньому каталозі, дивно.
влаштовуйте

Навіть незнайомець: я просто спробував усе, що знаходиться в / home / root /, яке, очевидно, належить root. Не працювало. Я перемістив все назад під / bin / pms, і воно знову працювало. Отож, схоже, намагання підвищити PMS з-під / вдома не працює в моїй системі.
Kent Boogaart

1

У мене була подібна проблема "без запуску", коли я зрозумів, що мій сценарій залежить від файлу, який знаходився в моєму домі, і додому він був недоступний, оскільки був зашифрований за допомогою стандартного механізму ubuntu (.Private).

start on local-filesystems подія (ймовірно) випускається до завершення процесу дешифрування.


1

Ваш домашній каталог в 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 завжди показують роботу завдань як зупинену.


Посилання, на яке посилається, розривається.
slm

0

У моєму випадку послуга для запуску залежала від сценарію, що знаходиться у бродячій синхронізованій папці . Вирішено проблему за допомогою наступного рядка:

start on vagrant-mounted

Більше інформації: http://razius.com/articles/launching-services-after-vagrant-mount/


0

Подібно до @xuhcc, я прийшов сюди, щоб дізнатися, чому мій сценарій Vagrant Upstart не працює. Передбачається, що працює:

почати на бродячому

Але це не відбувається в деяких збірках через наступну помилку.

https://github.com/mitchellh/vagrant/isissue/6074

Вирішений у звіті спосіб вирішив для мене:

$ cat /etc/init/workaround-vagrant-bug-6074.conf 
# workaround for https://github.com/mitchellh/vagrant/issues/6074
start on filesystem
task

env MOUNTPOINT=/vagrant

script
  until mountpoint -q $MOUNTPOINT; do sleep 1; done
  /sbin/initctl emit --no-wait vagrant-mounted MOUNTPOINT=$MOUNTPOINT
end script

Для мене чудово працювали


0

він працював для мене (мені потрібна послуга запуску після iface up):

start on started networking and net-device-up IFACE=wlan1 
stop on shutdown

respawn
respawn limit 10 10
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.