我创建了一个upstart脚本以守护juggernaut(一个node.js app) upstart脚本如下
description "juggernaut server"
author "panojsee"
start on startup
stop on shutdown
script
# We found $HOME is needed. Without it, we ran into problems
#export HOME="/home/ubuntu/src/juggernaut"
chdir /home/ubuntu/src/juggernaut
exec sudo /usr/bin/node server.js 2>&1 >> /var/log/node.log
end script
正如您所看到的,我想用sudo运行节点(这样我就可以使用Flash套接字)。 我的monit脚本如下:
设置logfile /var/log/monit.log
check host juggernaut with address 127.0.0.1
start program = "/sbin/start juggernaut"
stop program = "/sbin/stop juggernaut"
if failed port 8080 protocol HTTP
request /
with timeout 10 seconds
then restart
Monit不允许我有启动程序=“ sudo / sbin / start juggernaut” 一旦我杀死了juggernaut(节点),然后monit尝试重新启动它,但会死掉以下消息。
[UTC Feb 3 22:48:25] error : 'nodejs' failed, cannot open a connection to INET[127.0.0.1:8080] via TCP
[UTC Feb 3 22:48:25] info : 'nodejs' trying to restart
[UTC Feb 3 22:48:25] info : 'nodejs' stop: sudo
[UTC Feb 3 22:48:25] error : Error: Could not execute sudo
[UTC Feb 3 22:48:25] info : 'nodejs' start: sudo
有什么线索我怎么告诉monit执行sudo命令?
答案 0 :(得分:3)
我认为您应该使用专用用户运行nodeJS,然后从起始脚本中删除“exec sudo”,并告诉monit您想要使用哪个用户。
启动program =“/ sbin / start juggernaut”作为uid user-id
答案 1 :(得分:2)
用sudo开始Monit,当然还要添加monit给sudoers
答案 2 :(得分:1)
检查正在运行的用户monit。该用户是否配置为运行sudo?检查sudo是否报告了任何错误(可能在/var/log/messages
)。
我发现this answer对于搞清楚monit行为非常有帮助。