Фон:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04 LTS"
Я собрал nginx и хотел бы использовать upstart для его запуска:
Скрипт выскочки nginx с сайта:
description "nginx http daemon"
start on runlevel 2
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
console owner
exec /usr/sbin/nginx -c /etc/nginx/nginx.conf -g "daemon off;"
respawn
Я получаю «неизвестную работу», когда пытаюсь использовать initctl для ее запуска, которую я только что узнал, очевидно, что это означает, что есть ошибка (что не так с «Ошибка» для описания ошибок?)
Может ли кто-нибудь указать мне правильное направление? Я прочитал документацию в том виде, в каком она есть, и она кажется немного редкой для замены инициализации SysV ... но все, что нужно, чтобы добавить это задание в список, запустить его и продолжить то, что осталось от моей жизни. .. Какие-нибудь советы?
РЕДАКТИРОВАТЬ: initctl версия init (upstart 0.6.5)
ubuntu
upstart
ubuntu-10.04
chiggsy
источник
источник
Ответы:
Вы не можете иметь несколько
stop on
директив в описании выскочки для Upstart> = 0.5.И
console owner
это, вероятно, не то, что вы хотите (это делает nginx владельцем системной консоли).Пытаться:
источник
man 5 init
daemon off
Опция только для развития.Я оказывался здесь несколько раз, поэтому решил использовать обновленный ответ, основываясь на своем собственном опыте, после использования ответов здесь. Большое спасибо @danorton и @orj за их ответы.
Этот скрипт был протестирован на Upstart 1.5, работающем в Ubuntu 12.04 с Nginx 1.0.11 и Passenger 3.0.11. Если вы не используете Passenger, вам, возможно, придется поиграть с
post-stop
линией. Обратитесь к поваренной книге Upstart.В пустую
/etc/init/nginx.conf
добавьте следующие строки (Вы можете удалить комментарии, если хотите):Я взял скрипт Upstart из Nginx Wiki и настроил его, так как ряд строк не нужен, вызывает путаницу или не работает.
Возможно, вам придется изменить
env DAEMON
иenv PID
строки в зависимости от того, где вы установили nginx и пишете PID. PID может быть настроен в nginx.Я перепробовал все формы
expect
. Толькоexpect fork
кажется, что работает. С Passenger nginx создает 61 вилку. Upstart требует 0, 1 или 2. Как подсказали другие, Upstart будет отслеживать неправильный PID. Я также удалил,respawn
поскольку это ничего не делает, вероятно, по той же причине. Некоторые дополнительные скрипты pre / post-start могут исправить это, взяв настоящий PID. Я, однако, использую monit для обработки перезапусков, поэтому мне это не нужно.Не используйте
daemon off
. Это только для разработки. Смотрите http://wiki.nginx.org/CoreModule#daemonСсылки:
источник
daemon off;
так что выскочка часами правильного процесса / PID без необходимости дляexpect fork
илиpost-stop
директив. Раздел вики описания опции демона также заявляет , что «Вы можете использовать демон благополучно в производственном режиме с runit / DaemonTools, однако вы не можете сделать изящное обновление.», Который я предполагаю , что имеет в виде модернизации на новый двоичный файл на особенность полетаТы не можешь По крайней мере, не совсем так.
Nginx не порождает своего демона одним из двух способов, которые требует upstart, либо через «ожидаемую ветвь», либо «ожидаем демона», поэтому upstart не может отследить основной процесс nginx. Есть некоторые хаки, но у них есть свои проблемы.
Если вы согласны с тем, что upstart не может отследить главный процесс и завершить его при завершении работы, это будет работать:
источник
expect daemon
вызывает зависание для меня upstart (Ubuntu 12.04, Upstart 1.5, Nginx).expect fork
работал, хотя, как подсказывает @danorton, Upstart будет отслеживать неправильный PID. Я также не мог заставить респауна работать (см. Мой полный ответ).Существует пример конфигурационного файла Upstart в Nginx Wiki .
Возможно, вам придется настроить путь к двоичному файлу nginx в файле конфигурации.
Этот файл конфигурации работает нормально для меня с Ubuntu 10.04 и nginx 1.0.5.
Я также установил
nginx
символическую ссылку,/etc/init.d
указывая на нее,/lib/init/upstart-job
чтобы использовать стандартнуюservice
команду для запуска и остановкиnginx
.Примечание. Если вы устанавливаете Phusion Passenger с NGINX, вам может потребоваться добавить следующий раздел в скрипт конфигурации Upstart:
Я нашел это необходимым в моей конфигурации Ubuntu. В противном случае, когда я выпустил
initctl stop nginx
илиservice nginx stop
nginx на самом деле не остановился. Я также заметил, что Upstart думал, что у процесса nginx есть PID, который на самом деле был PID одного из процессов Passenger. Очевидно, что NGINX / Passenger немного сбивает с толку Upstart.источник
stop: Job failed while stopping
при этом. Ты это видел?Я использую:
Остановка
runlevel [!...]
кажется более стандартной. Это то, что делают стандартные ssh / samba-скрипты. Вы также должны добавитьrespawn
бит, чтобы он перезапустился, если он умирает. Я также не уверен, почему вы хотитеconsole output
, чтобы это просто отправляло вывод консоли на стандартный вывод. Поведение по умолчанию - просто отправлять консольный вывод в регистратор.Вы можете увидеть все строфа документы на вики Upstart
источник
См. Http://geeknme.wordpress.com/2009/10/15/getting-started-with-upstart-in-ubuntu для получения дополнительной информации.
источник
Как ни странно, ни один из ответов здесь на самом деле не работает полностью, поскольку они оставляют выскочку в состоянии остановки / остановки, что мешает другому начать работать. Это значит, что
restart nginx
не получается.Ошибка с upstart хорошо документирована по адресу https://bugs.launchpad.net/upstart/+bug/406397, и я удивлен, что автору upstart, похоже, не все равно, чтобы его исправить. Единственное решение, которое я видел, работает: следующее (украдено из того же сообщения об ошибке):
Преимущество такого написания заключается в том, что даже респаун работает. Недостатком является то, что это уродливый и противный взлом.
источник