我试图定期使用Cron重新启动PHP5-FPM,但我没有运气。
我可以手动重新启动,没有问题,使用service php5-fpm restart或/usr/sbin/service php5-fpm restart
但是,当我使用相同的命令(包括使用/usr/sbin/service的完整path)时,什么都不会发生。 cronjob确实运行(正如我从syslog中看到的那样),但是PHP5-FPM不会重新启动。
我的root用户的crontab的相关行如下所示:
* * * * * /usr/sbin/service php5-fpm restart
我已经确认了which servicepath确实是/usr/sbin/service 。
为什么这不起作用?
你可以使用initctl :
/sbin/initctl restart php5-fpm
晚会回答
cron在一个非常轻的环境中运行脚本。
service确实检查服务是否是一个初始的upstart或一个/etc/init.d脚本,在这种情况下会运行
[ /sbin/ ] restart
命令(一个到initctl的符号链接),但是它失败了,因为当cron运行时/sbinpath不是PATH一部分,并且在没有其绝对path的情况下restart 。
实际上你可以在crontab的开头设置 cron 的PATH ,但是最好直接把需要的命令设置为
mh * * * /sbin/restart php5-fpm
注意
使用symlink / sbin / restart而不是直接调用initctl 。 脚本/命令在这里是有原因的,基本上是为了帮助pipe理员用命令做一些特定的事情,简单的语法,并且名字容易记住。
今天restart是一个符号链接。 明天,在调用initctl之前,它可能会成为一些脚本来做其他事情。
我能想出的唯一解决scheme是在/etc/init.d/php5-fpm文件中注释以下几行:
# Don't run if we are running upstart #if init_is_upstart; then # exit 1 #fi