Как мне отладить выскочку работы?

10

У меня есть следующая работа в /etc/init/collector:

start on runlevel [2345]
stop on runlevel [!2345]

expect daemon

exec /usr/bin/twistd -y /path/to/my/tac/file

Когда я начинаю работу с sudo service collector start, она зависает. Если я ctrl-cи бегу initctl list, то увижу это:

collector start/killed, process 616

Я не вижу экземпляра twistdдемона в ps, и сервер HTTP, который он должен предоставлять, не существует.

Я даже попробовал это без «ожидаемого демона» и с простым вызовом однострочного сценария bash, используя scriptраздел, и он все еще не работает. Я думаю, что я делаю что-то очень неправильно. Что бы это могло быть?

Cera
источник
Нет ответа, но я борюсь с аналогичной проблемой. Это может быть даже ошибка в Upstart: bugs.launchpad.net/ubuntu/+source/upstart/+bug/438313 Я не знаю, как выйти из этого состояния зависания, кроме перезагрузки. Также я считаю, что это связано с expect daemonлинией.
вред

Ответы:

14

Вы можете перенаправить stdoutи stderrвсю оболочку, используя scriptпрагму (вместо exec) в сочетании с exec >FILE 2>&1, вот так:

script
    exec >/path/to/some_log_file 2>&1
    exec your_command_here
end script

Надеюсь, это даст вам лучшее понимание того, что происходит. Я нашел это полезным для обнаружения всех видов проблем в моих сценариях выскочки. Вы могли бы направить вашу команду stdout/ stderrнапрямую, но вы пропустите ошибки, возникающие в оболочке (например, синтаксические ошибки).

С другой стороны, если serviceон зависает, он может даже не попасть в ваш скрипт, и в этом случае, конечно, ничего из этого не поможет.

Чарльз
источник
Спасибо, это поставило меня на правильный путь. В конце концов я передал вывод logger, чтобы я мог просто хвост /var/log/syslog.
Cera
Кроме того, ошибки в самом файле conf показаны в dmesg. Я узнал об этом после того, как я не получил никакого вывода при использовании выше. Я сделал опечатку в директиве chdir.
codingFoo
Где вы положили этот код?
к
2

Есть также console logдекларативный, как здесь определено: http://upstart.ubuntu.com/cookbook/#console-log

Я не знаю достаточно о выскочке, чтобы знать, включена ли она по умолчанию, но вы можете включить ее для каждого задания выскочки, по умолчанию она будет выводиться на /var/log/upstart/<job>.log

Этеш Чоудхури
источник
0

Убедитесь, что выскочивший директор существует, и добавьте журнал консоли перед фазой сценария. (в верхней версии выше 1.4 это по умолчанию)

консольный журнал

скрипт exec> / path / to / some_log_file 2> & 1 exec your_command_here end script

Для получения дополнительной информации проверьте поток: /ubuntu/207143/how-to-diagnose-upstart-errors/932155#932155

zachlaniado
источник