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


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раздел, и он все еще не работает. Я думаю, что я делаю что-то очень неправильно. Что бы это могло быть?


Нет ответа, но я борюсь с аналогичной проблемой. Это может быть даже ошибка в 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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.