如何将 nginx 从 init.d 移至 upstart

如何将 nginx 从 init.d 移至 upstart

我有一个 nginx 的 init.d 脚本,通常可以正常工作。但是,重启后它无法正常工作,工作进程会死掉,只剩下主进程。

nginx 编译了一些 mongodb 内容(nginx-gridfs),需要在 upstart 启动 mongodb 之后启动。

经过一番故障排除后,我只能弄清楚这些。我认为我必须将 nginx 更改为 upstart,并使其依赖于 mongo。我该怎么做?

答案1

由于 nginx-gridfs 连接到 mongodb,因此数据库服务器应该已经运行并准备就绪。这导致了一个问题。首先,我使用“update-rc.d remove nginx”删除了 /etc/init.d/nginx 脚本,然后在 /etc/init/nginx.conf 中创建了一个“upstart”脚本:

# nginx

description "nginx http daemon"

#start on mongodb  
start on (local-filesystems
    and net-device-up IFACE=lo
    and started mongodb) 
stop on stopped mongodb

env DAEMON=/usr/local/nginx/sbin/nginx 
env PID=/usr/local/nginx/logs/nginx.pid

expect fork 
respawn 
respawn limit 10 5

pre-start script
        $DAEMON -t
        if [ $? -ne 0 ]
                then exit $?
        fi
        # Add a sleep of 10 sec. to allow mongodb to finish starting up
        sleep 10 
end script

exec $DAEMON

这为我解决了这个问题。

答案2

您可能没有正确设置它update-rc.d <yourscript> start [startorder] 2 3 4 5 . stop [end order] 0 1 6 .来创建运行级别链接。

如果你的脚本正确完成,它会接受start命令stop,检查所有依赖项是否在脚本之前启动,通常 40 是安全的开始顺序并且所有依赖脚本的服务都在此之前结束,那么 20 可能就足够了结束顺序

为了更好地了解如何编写好的脚本,请查看你的/etc/init.d

相关内容