如何从cron重新启动PHP-FPM?

我试图定期使用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