我有这个使用nodejs运行的Javascript Signal服务器。
但是每天它都会崩溃,因此整个服务都会崩溃。我正在使用以下无限循环来重新启动nodejs脚本,如果它已崩溃或未运行。但它并不完美。
任何人都可以优化它,或者是否有更好的方法来保持a.js一直运行,如果突然进程没有活着的话。
#!/bin/bash
while :
do
# 1
videoupload=$(pgrep -f "a.js")
if [ $videoupload ]; then
log1="running a $1 $2"
else
log1="re-launch a $1 $2"
nohup node /var/tmp/signal/a.js 2>&1 | tee -a /var/tmp/signal.log &
fi
echo $log1
sleep 1
done
答案 0 :(得分:2)
如果您正在使用新的CentOS 6,更好的方法是将其置于Upstart脚本中。 Upstart监视所有系统守护进程并确保它们保持运行。下面的Upstart配置也将在系统启动时启动您的进程。
编辑文件/etc/init/a.conf
并将以下配置放入其中。您需要sudo
以root身份进行编辑。
description "a.js"
author "YumYumYum"
# Stanzas
#
# Stanzas control when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
# When to start the service
start on runlevel [2345]
# When to stop the service
stop on runlevel [016]
# Automatically restart process if crashed
respawn
script
echo $$ > /var/run/a.pid;
exec node /var/tmp/signal/a.js
end script
post-stop script
rm -f /var/run/a.pid
end script
现在您已为流程创建了Upstart配置,您可以从命令行启动它:
$ sudo service a start
Upstart将监控您的流程,并在任何时候停止运行。它还会将日志重定向到/var/log/upstart/a.log
。