首页 > 解决方案 > 从 CPanel Cron 作业运行节点服务器

问题描述

我有一个在 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.jscroncpanelpm2

解决方案


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


推荐阅读