【问题标题】:Run Node Server from CPanel Cron Job从 CPanel Cron 作业运行节点服务器
【发布时间】:2019-08-26 10:48:50
【问题描述】:

我有一个在 PM2 上运行的 Node.JS 服务器,由于我正在处理的数据库限制,它每隔一段时间就会崩溃。

与此同时,我想我会尝试在 cpanel 中设置一个 cron 作业,以便在服务器宕机时每小时重新启动一次。

所以我写了一个如下的 bash 脚本:

#!/bin/bash

status_code=$(curl --write-out %{http_code} --silent --output /dev/null https://website.com/)

date >> cronlog.txt
if [[ "$status_code" -ne 200 ]] ; then
  pkill node
  nohup pm2 start bin/www &
  echo "Site status $status_code" >> cronlog.txt
  echo "Restarting Server" >> cronlog.txt
  exit
else
  echo "Site fine" >> cronlog.txt
  exit 0
fi

从 SSH 终端运行它可以完美运行;如果站点关闭,它将重新启动它。

但是,一旦我在 cpanel 中设置了 cron 作业,如下所示:0 * * * * /home/acc123/fix.sh,查看cronlog.txt 的输出,我发现脚本肯定每小时都在运行,试图重新启动服务器 - 它只是服务器没有重启。

初步的 Google 建议可能 pm2 不在 cron 作业运行的路径上,因此我将脚本修改为如下所示:

#!/bin/bash

status_code=$(curl --write-out %{http_code} --silent --output /dev/null https://website.com/)

date >> cronlog.txt
if [[ "$status_code" -ne 200 ]] ; then
  pkill node
  nohup /home/acc123/bin/pm2 start /home/acc123/bin/www &
  echo "Site status $status_code" >> cronlog.txt
  echo "Restarting Server" >> cronlog.txt
  exit
else
  echo "Site fine" >> cronlog.txt
  exit 0
fi

但没有任何改变。查看我写入的文本文件,该脚本肯定每小时都在运行,并且肯定会发现站点已关闭,但是当“重新启动服务器”字样写入文本文件时,服务器实际上并没有启动.

检查nohup.out 确认没有写入任何内容,这表明命令nohup /home/acc123/bin/pm2 start /home/acc123/bin/www & 运行不正确。

我被难住了。有没有人见过类似的东西?

【问题讨论】:

    标签: node.js cron cpanel pm2


    【解决方案1】:

    找到了。看起来节点本身也不在 cron 作业的路径变量上。明确指定节点修复问题的位置。

    【讨论】:

      最近更新 更多