【问题标题】:BASH - why my NodeJS server script crashing?BASH - 为什么我的 NodeJS 服务器脚本崩溃了?
【发布时间】:2016-12-21 15:00:34
【问题描述】:

运行 CentOS(Linux 信号服务器 3.10.0-123.8.1.el7.x86_64)。当我使用 SSH 登录服务器然后手动执行以下行时,它可以工作,但是当我退出与服务器的 SSH 连接时会崩溃。

$ node /var/www/html/signal-server/avi.js &

当我没有通过 SSH 手动登录时,这个机器人也无法让服务器运行:

#!/bin/bash
while :
do
  # 1
  avi=$(pgrep -f "avi.js")
  if [[ "$avi" ]]; then
    log1="1 - running avi.js $1 $2"
  else
    log1="1 - re-launch avi.js $1 $2"
    ps aux | grep "avi.js" | awk '{print $2}' | xargs kill
    sleep 1
    # same if nohup also used
    node /var/www/html/signal-server/avi.js &

  fi

  tt=$(date +"%Y-%m-%d %T")
  echo "$tt" "$log1"

  sleep 2
done

请问我怎样才能让它永远运行? (我还有其他服务,它们工作正常,只有当我从 SSH 会话注销时,这一项总是崩溃)

【问题讨论】:

标签: node.js linux bash ssh centos


【解决方案1】:

nohup 会做你想做的事

nohup node /var/www/html/signal-server/avi.js &

你真的应该为你的服务编写一个 systemd 脚本,然后如果你的服务器重新启动,你的服务将再次启动。

这是一个粗略的想法,这样的脚本可能是什么样子

[Service]
ExecStart=node /var/www/html/signal-server/avi.js
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=node-avi
User=some-user
Group=some-group
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

花点时间阅读 systemd 文档

【讨论】:

  • nohup 没有解决问题。当我使用它时,它的工作原理:github.com/foreverjs/forever
  • 如果您的服务器仍然死机,可能是因为代码中存在错误。鉴于我目前所知道的,我仍然建议使用systemd
  • 服务器代码没有死,我已经放了异常捕获器try { } catch () { } 所以它永远不会死。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多