我有一个 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