为什么该脚本无法启动 apache 网络服务器?

为什么该脚本无法启动 apache 网络服务器?

我使用此脚本重新启动 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

相关内容