У меня есть сервер Node.JS, работающий на PM2, который иногда выходит из строя из-за ограничения базы данных, над которым я работаю.
Тем временем я решил попробовать настроить cron в cpanel для перезапуска сервера каждый час, если он не работает.
Итак, я написал скрипт 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 работает отлично; если сайт не работает, он перезапустит его.
Однако, как только я настроил задание cron в cpanel, примерно так: 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 &
почему-то работает неправильно.
Я в тупике. Кто-нибудь видел что-то подобное раньше?