我正在尝试使用 Cron 定期重新启动 PHP5-FPM,但没有成功。
我可以毫无问题地手动重启,使用service php5-fpm restart
或/usr/sbin/service php5-fpm restart
但是,当我使用相同的命令(包括使用 的完整路径)时/usr/sbin/service
,什么也没有发生。 cronjob 确实运行了(正如我从 syslog 中看到的那样),但 PHP5-FPM 并未重新启动。
我的 root 用户的 crontab 的相关行如下:
* * * * * /usr/sbin/service php5-fpm restart
我已确认which service
,服务路径确实是/usr/sbin/service
。
为什么这不起作用?
答案1
您可以使用initctl
:
/sbin/initctl restart php5-fpm
答案2
迟到的答案
cron
在非常轻的环境中运行脚本。
service
确实会检查服务是否初始化新贵或/etc/init.d脚本,在本例中将运行
[ /sbin/ ] restart
命令(符号链接到初始化)但它失败了,因为/sbin
路径不是PATH
when的一部分计划任务运行并且restart
不给出其绝对路径。
你实际上可以设置路径为了计划任务在定时任务,但最好直接设置需要的命令
m h * * * /sbin/restart php5-fpm
笔记
使用符号链接/sbin/重启而不是直接打电话初始化脚本/命令在这里是有原因的,基本上是为了帮助管理员使用命令执行特定的事情,使用简单的语法并具有易于记忆的名称。
今天restart
是一个符号链接。明天它可能会变成一个在调用之前执行其他操作的脚本initctl
。
答案3
我能想到的唯一解决方案是在 /etc/init.d/php5-fpm 文件中注释掉以下几行:
# Don't run if we are running upstart
#if init_is_upstart; then
# exit 1
#fi