我有一个运行在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
但是没有任何变化。查看我写入的文本文件,该脚本肯定每个小时运行一次,并且肯定是站点已关闭,但是当“ Restarting Server”一词写入该文本文件时,该服务器实际上并未启动
检查nohup.out
确认没有写任何内容,这表明命令nohup /home/acc123/bin/pm2 start /home/acc123/bin/www &
不能正确运行。
我很困惑。有人看过类似的东西吗?
答案 0 :(得分:0)
找到了。看起来节点本身也不在cron作业的path变量上。明确指定问题所在的位置。