【发布时间】:2014-10-02 09:12:10
【问题描述】:
我有一个 node.js 服务器应用程序由于某种原因被启动了两次。我有一个每分钟运行的 cronjob,检查 node main.js 进程,如果找不到,则启动它。 cron 看起来像这样:
* * * * * ~/startmain.sh >> startmain.log 2>&1
startmain.sh 文件如下所示:
if ps -ef | grep -v grep | grep "node main.js" > /dev/null
then
echo "`date` Server is running."
else
echo "`date` Server is not running! Starting..."
sudo node main.js > main.log
fi
存储startmain.js 输出的日志文件显示如下:
Fri Aug 8 19:22:00 UTC 2014 Server is running.
Fri Aug 8 19:23:00 UTC 2014 Server is running.
Fri Aug 8 19:24:00 UTC 2014 Server is not running! Starting...
Fri Aug 8 19:25:00 UTC 2014 Server is running.
Fri Aug 8 19:26:00 UTC 2014 Server is running.
Fri Aug 8 19:27:00 UTC 2014 Server is running.
这是我所期望的,但是当我查看进程时,似乎有两个正在运行。一个在 sudo 下,一个没有。查看前两个进程:
$ ps -ef | grep node
root 99240 99232 0 19:24:01 ? 0:01 node main.js
root 99232 5664 0 19:24:01 ? 0:00 sudo node main.js
admin 2777 87580 0 19:37:41 pts/1 0:00 grep node
确实,当我查看应用程序日志时,我看到启动条目重复出现。要杀死这些进程,我必须使用sudo,即使对于不以sudo 开头的进程也是如此。当我杀死其中一个时,另一个也会死。
知道我为什么要启动两个进程吗?
【问题讨论】:
-
你在使用节点集群功能吗?