根据 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 <[email protected]>"
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
答案1
这里没有简单的答案。不幸的是,如果你将语法检查的输出通过管道传输到 logger 之类的程序,你将丢失返回代码来检查它是否失败。所以你必须这样做:
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
(顺便说一句,您应该注意到所有 upstart 脚本部分都是用“set -e”运行的,所以原始示例中的 if 语句将不会被执行..只要命令退出非零,shell 就会退出。)