javascript - 如何让这个服务器进程永远运行呢?

标签 javascript node.js bash centos

我有一个使用 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/

相关文章:

javascript - Firebase平面数据库更新方法

javascript - 如何动态创建具有不同 ID 的输入元素?

javascript - 使用express.js在收到http请求后执行函数?

java - shell 脚本崩溃后可靠地重新启动 java 进程

linux - 在 bash 中获取重定向位置

javascript - jQuery函数仅执行一次?

javascript - 连续激活div

angularjs - 如何从node.js函数向 Angular Controller 发送消息

javascript - 重新加载快速中间件的正确方法是什么?

php - 如何确保进出数据库的所有数据都是 utf-8 编码的?