Upstart 输出启动前脚本内容

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 <[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 就会退出。)

相关内容