Назад | Перейти на главную страницу

Содержимое сценария предварительного запуска вывода Upstart

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