【发布时间】: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 & 运行不正确。
我被难住了。有没有人见过类似的东西?
【问题讨论】: