Как отладить сценарии Upstart?

67

По какой-то причине я получаю сообщение об ошибке при обновлении приложения , причина которого

% sudo service apport start
start: Job failed to start

Под sysvinit я мог бы отладить такого рода проблемы, запустив, например,

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

но это не похоже на карту Upstart. Что я должен попробовать дальше?

Оказывается, есть обходной путь , который позволит продолжить установку. Но меня все еще интересует общий вопрос о том, как можно отследить сценарий.

poolie
источник
1
Я работаю над более подробным ответом, но спасибо за ссылку на обходной путь, то же самое случилось со мной, обновляя natty сегодня!
Марк Рассел
Ха-ха, и они выпустили исправление 12 минут назад. Разве бета-версия не доставляет удовольствие? (на самом деле нет!)
Марк Рассел
+ Мухаммед опубликовал правильный ответ ниже.
Трэвис Ридер
Я нашел полезную информацию отладки в /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, указанной выше, для всех, кто работает с заданиями Upstart.

Марк Рассел
источник
Спасибо за это, если бы я не видел, что ошибка была устранена, я бы, вероятно, изменил сценарий, чтобы включить, set -xкак вы предлагаете. Меня больше всего интересовало, есть ли более чистый способ сделать это.
пул
Да, не то, о чем я знаю (и если его нет в кулинарной книге, это означает, что, вероятно, просто нет). Помимо этой идеи, большинство упомянутых методов отладки больше касаются устранения неполадок самих событий Upstart и Upstart, где я обычно нахожусь. :)
Марк Рассел
И все же этот метод потерпит неудачу, если setuidи setgidбудет использоваться в рабочих местах.
0xC0000022L
/dev/.initramfs не всегда присутствует. Я только что наткнулся на машину, у которой нет этого пути.
Сардж Борщ
110

Upstart регистрирует выполнение вашей службы в файле журнала с тем же именем в /var/log/upstart/your-service-name.log. Это должно быть полезно.

Мухаммед Гелбана
источник
2
Да, похоже, это включает в себя stderr рабочих мест, так что, если я включу set -xего, он, вероятно, появится там.
пул
1
Я вставил в журнал эхо-оператор в моем скрипте /etc/init.d/Xservice, но он не отображается в этом месте! ОС: Ubuntu 14,04 Trusty
Champ
Почему бы не системный журнал? Могу ли я предложить общую функцию, возможно, сам rsyslog, которую выскочка и любой компонент будут использовать для записи в системный журнал, если он недоступен, или во временное место, которое будет перенесено в системный журнал как можно скорее. Мне потребовалось полдня, чтобы найти это. Пожалуйста, перешлите это замечание TIA.
Папу
4
Похоже, что это не так в 16.04, по-видимому, начиная с 15.10, по крайней мере: последние файлы в этом каталоге датируются непосредственно перед выпуском 15.10.
FGM
1
@FGM это потому, что 16.04 больше не использует upstart, он использует systemd. Журналы доступны сjournalctl
Джереми