Як налагодити сценарії Upstart?


67

Чомусь я отримую помилку під час оновлення apport , причиною якої є

% sudo service apport start
start: Job failed to start

Під sysvinit я можу налагодити подібну проблему, запустивши напр

sudo sh -x /etc/init.d/whatever start

але це, схоже, не відображається до Upstart. Що слід спробувати далі?

Виявляється, є рішення, яке дозволить встановити процес. Але мене все ще цікавить загальне питання про те, як можна простежити сценарій.


1
Я працюю над більш ретельною відповіддю, але дякую за посилання на вирішення, зі мною сьогодні відбулось те саме, що оновило натура!
Марк Рассел

Ха-ха, і випустили виправлення 12 хвилин тому. Не працює бета-версія? (ні справді!)
Марк Рассел

+ Мухаммед розмістив правильну відповідь нижче.
Travis Reeder

Я знайшов корисну інформацію про налагодження в /var/log/syslog.
Метт

Відповіді:


29

Вся наведена нижче інформація (і набагато корисніша допомога Upstart) - з The Upstart Cookbook . Розділ 18 охоплює налагодження. http://upstart.ubuntu.com/cookbook/#debugging

У цьому конкретному випадку відстеження строфи "скрипта" завдання Upstart слід додати наступні рядки прямо під словом "скрипт":

exec 2>>/dev/.initramfs/myjob.log
set -x

Причиною дивного розташування є те, що /dev/.initramfs/ доступний у дуже ранньому завантаженні, до завантаження кореневої файлової системи та надалі залишається доступним після завантаження. Я здогадуюсь з apport, однак, ви, ймовірно, не потрібно використовувати цей шлях. Все-таки приємно знати варіант.

Слід також зазначити, що всі сценарії виконуються з set -eтаким чином, будь-яка команда, яка не працює, повністю закриє сценарій. Що має сенс, так як слід бути дуже обережним при запуску скриптів як root.

Я настійно рекомендую проконсультуватися з прив’язаною вище книгою Upstart Cookbook для всіх, хто працює з завданнями Upstart.


Дякую за це, якби я не бачив, щоб помилка була вирішена, я, ймовірно, змінив би сценарій, щоб він увімкнувся, set -xяк ви запропонували. Мені в основному було цікаво, чи є чистіший спосіб зробити це.
poolie

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

І все-таки цей метод вийде з ладу, якщо setuidі setgidвикористовується в робочих місцях.
0xC0000022L

/dev/.initramfs не завжди присутній. Я щойно натрапив на машину, яка не має цього шляху.
Sarge Borsch

110

Upstart записує виконання вашої служби у файл журналу з тим самим іменем у /var/log/upstart/your-service-name.log. Це має бути корисним.


2
Правильно, схоже, що це включає складніші робочі місця, тому, якби я ввімкнув, set -xто, ймовірно, з'явиться там.
poolie

1
Я розміщую в журналі /etc/init.d/Xservice сценарій журналу на основі відлуння, але він не відображається в цьому місці! ОС: Ubuntu 14.04 Trusty
Champ

Чому б не систематизувати? Я можу запропонувати загальну особливість, можливо, сам rsyslog, що запуску та будь-який компонент буде використовувати для запису в syslog, якщо він недоступний, або у тимчасове місце, яке буде переведено на syslog asap. На це знадобилося півдня, щоб знайти це. Будь ласка, надішліть це зауваження TIA.
Папу

4
Здається, це більше не відповідає дійсності 16.04, мабуть, щонайменше з 15.10: останні файли в цьому каталозі датовані справа до випуску 15.10.
FGM

1
@FGM це тому, що 16.04 більше не використовує запуску, він використовує systemd. Доступ до журналівjournalctl
Джеремі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.