我有一个使用 Nodejs 运行的 Javascript 信号服务器。
但是每天它都会崩溃,导致整个服务瘫痪。如果 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
最佳答案
如果您使用的是新的 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
。
关于javascript - 如何让这个服务器进程永远运行呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26706625/