На основе содержимого сценария Ubuntu init.d для управления экземплярами nginx, который можно найти по адресу: http://wiki.nginx.org/Nginx-init-ubuntu Я пытаюсь обновить версию Upstart, которую можно найти по адресу: http://wiki.nginx.org/Upstart для проверки синтаксиса конфигурации.
В основном, что ему нужно сделать, это позвонить:
$DAEMON -t -c $NGINX_CONF_FILE
Это должно выводить сообщения об ошибках относительно неправильного синтаксиса файлов конфигурации.
Я безуспешно пробовал следующее:
# nginx
description "nginx http daemon"
author "George Shammas <georgyo@gmail.com>"
start on (filesystem and net-device-up IFACE=lo)
stop on runlevel [!2345]
env DAEMON=/opt/nginx/sbin/nginx
env PID=/var/run/nginx.pid
env NGINX_CONF_FILE=/etc/nginx/nginx.conf
console output
expect fork
respawn
pre-start script
$DAEMON -t -c $NGINX_CONF_FILE
if [ $? -ne 0 ]
then exit $?
fi
end script
post-stop script
start-stop-daemon --stop --pidfile $PID --name nginx --exec $DAEMON --signal TERM
end script
exec $DAEMON -c $NGINX_CONF_FILE
Проблема здесь в том, что он не выводит вывод на консоль даже со строфой «вывод на консоль».
Я что-то упустил?
Когда он не запускается, я получаю простое:
root@localhost:/# start nginx
start: Job failed to start
Здесь нет простого ответа. К сожалению, если вы передадите вывод проверки синтаксиса чему-то вроде регистратора, вы потеряете код возврата, чтобы проверить, не удалась ли она ... поэтому вам нужно сделать это примерно так:
syntax_check_output=`mktemp /tmp/nginx.check.XXXXXX`
if $DAEMON -t -c $NGINX_CONF_FILE > $syntax_check_output 2>&1 ; then
rm -f $syntax_check_output
else
logger -t nginx -p daemon.err < $syntax_check_output
rm -f $syntax_check_output
exit 1
fi
(кстати, вы должны отметить, что все разделы сценария выскочки запускаются с 'set -e', поэтому оператор if в вашем исходном примере не будет выполняться ... как только команда завершится ненулевым значением, оболочка завершится. )