我使用此脚本重新启动 apache2 网络服务器,因为 letsencrypt ssl 更新过程在完成其操作后不会重新启动它。
当我通过停止服务器并运行脚本手动测试它时,它工作正常。但是,当它是运行的 cronjob 的一部分时,Web 服务器不会启动。但是在 /var/log/syslog 中,我有很多行表明它正在尝试启动 Web 服务器。
脚本如下:
#!/bin/sh
ps auxw | grep '/usr/sbin/apache2' | grep -v grep > /dev/null
if [ $? != 0 ]
then
logger "starting apache2 - keep-apache2-alive"
sudo service apache2 start
else
logger "apache2 is running - keep-apache2-alive"
fi
crontab 条目如下所示,每 2 分钟运行一次。
*/2 * * * * /home/user/scripts/keep-apache-running.sh
/var/log/syslog 条目如下所示:
Dec 30 23:34:01 node root: apache2 is running - keep-apache2-alive
Dec 30 23:36:01 node root: apache2 is running - keep-apache2-alive
Dec 30 23:38:01 node root: starting apache2 - keep-apache2-alive
Dec 30 23:40:01 node root: starting apache2 - keep-apache2-alive
Dec 30 23:42:01 node root: starting apache2 - keep-apache2-alive
Dec 30 23:44:01 node root: starting apache2 - keep-apache2-alive
Dec 30 23:46:01 node root: starting apache2 - keep-apache2-alive
Dec 30 23:48:01 node root: starting apache2 - keep-apache2-alive
Dec 30 23:50:01 node root: starting apache2 - keep-apache2-alive
我想我解决了。我查看了 root 的邮件,发现 cron 报告说它找不到“service”命令。因此 /usr/sbin 未包含在路径中。我进入并将绝对路径硬编码到 service 命令中,现在它应该可以正常工作了。
谢谢。
答案1
我想我解决了。我查看了 root 的邮件,发现 cron 报告说它找不到“service”命令。因此 /usr/sbin 未包含在 PATH 中。我进入并将服务命令的绝对路径硬编码,现在它应该可以工作了。
您可以在 shell 脚本的顶部设置 PATH,也可以将从脚本调用的所有命令的绝对路径硬编码。
这对找到我的解决方案很有帮助。
https://askubuntu.com/questions/23009/why-crontab-scripts-are-not-working