我正在使用upstart为生成的nginx python fastcgi脚本创建一个守护进程。如果我使用下面的作品:
sudo start myserver
什么行不通:
sudo stop myserver
stop: Unknown instance:
下面是我的conf文件,其中包含停止进程的命令。我假设杀死hte proccess的命令是在停止前脚本?
#!upstart
description "myserver"
author "Test"
start on startup
stop on shutdown
respawn
#instance
script
export HOME="/root"
echo $$ > /var/run/myerver.pid
exec spawn-fcgi -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001 >> /var/log/myserver.sys.log 2>&1
end script
pre-start script
# Date format same as (new Date()).toISOString() for consistency
echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/myserver.sys.log
end script
pre-stop script
rm /var/run/myserver.pid
sudo kill `sudo lsof -t -i:9001`
echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/myserver.sys.log
end script
答案 0 :(得分:8)
处理此问题的最佳方法是告诉spawn-fcgi在前台运行,而不是daemonize。 spawn-fcgi的手册页说-n
选项可以做到这一点。然后你可以改写这整个新手工作:
start on runlevel [2345]
stop on runlevel [016]
respawn
exec spawn-fcgi -n -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001 >> /var/log/myserver.sys.log 2>&1
请注意,使用Upstart 1.4,您甚至不需要日志方向,因为它默认为“console log”,它将具有/var/log/upstart/$UPSTART_JOB.log中的所有输出..所以它应该是只是
start on runlevel [2345]
stop on runlevel [016]
respawn
exec spawn-fcgi -n -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001
值得注意的是,它以root身份运行,但它会侦听端口9001.所以你可能会更好地运行为无人。使用Upstart 1.5(Ubuntu 12.04及更高版本)只需添加:
setuid nobody
setgid nogroup
(您可能需要将nobody / nogroup更改为ubuntu / ubuntu,因为您的文件位于/ home / ubuntu中)
另请注意,start on startup
无法可靠地运行,因为startup
事件发生在文件系统挂载之前和网络启动之前。同样start on shutdown
只是简单无效,因为它不是真实的事件。有关更多活动,请参阅man upstart-events
。
答案 1 :(得分:2)
我相信您的预停止正在停止服务器,因此当Upstart尝试停止服务器时,没有正在运行的进程停止并且它会给您带来错误。
答案 2 :(得分:0)
如果你守护你的进程你需要使用expect守护进程或期望fork线,以便upstart知道跟踪新的pid。
例如: 在启动时开始 停止关机 重生 期待守护进程
文档可以在upstart cookbook中找到: http://upstart.ubuntu.com/cookbook/#expect-daemon http://upstart.ubuntu.com/cookbook/#expect-fork