为什么crontab不能执行我的PHP脚本?

我已经build立了一个PHP文件来检查一些结果,所以我需要设置一个cronjob。

我设定每30分钟运行一次,以便结果发送。 但是,我不知道为什么我的crontab没有每30分钟后运行。

这是我如何设置crontab:

*/30 * * * * php /var/www/html/result.php 

我已经确认我的文件目录是正确的。 我不清楚的是时间部分:是不是可以使用*/30 * * * *30 * * * * ? 我设置*/30 * * * *并没有工作。

特定

 */30 * * * * php /var/www/html/result.php 

有多种可能性,为什么它不工作:

1)首先检查php /var/www/html/result.php的简单执行是非常重要的。 这是必需的。 但不幸的是,完成这并不意味着问题就解决了。

2)必须添加php二进制文件的path。

 */30 * * * * php /var/www/html/result.php 

改成

 */30 * * * * /usr/bin/php /var/www/html/result.php 

或任何来自which php

3)检查脚本的权限给运行crontab的用户。

给文件执行权限: chmod +x file 。 并确保有权执行脚本的用户启动crontab。 同时检查用户是否可以访问文件所在的目录。

4)为了更安全,您还可以在脚本的顶部添加phppath,例如:

 #!/usr/bin/php -q <?php ... ?> 

5)确保用户有权使用crontab。 检查他是否在/etc/cron.d/deny文件中。 此外,做一个基本的testing,看看它是一个crontanb或PHP的问题。

 * * * * * touch /tmp/hello 

6)如William Niubuild议的那样,将脚本的结果输出到一个日志文件中。

 */30 * * * * /usr/bin/php /var/www/html/result.php > /tmp/result 

7)使用-f选项来执行脚本:

 */30 * * * * /usr/bin/php -f /var/www/html/result.php > /tmp/result 

总之 ,有很多可能的原因。 其中之一应该解决问题。

这可能是因为PHP不在path中。 crontab有一个非常小的path 。 所以,包括你的PHP程序的完整path。

你可以testing你的cron命令通过pipe道输出到一个文件,例如

 */30 * * * * php /var/www/html/result.php > /tmp/result.log 

在此参考页面的 “Crontab环境”下:

cron使用shell(/ usr / bin / sh)从用户的HOME目录调用该命令。 cron为每个shell提供一个默认环境,定义:

 HOME=user's-home-directory LOGNAME=user's-login-id PATH=/usr/bin:/usr/sbin:. SHELL=/usr/bin/sh 

此外,所有平台都可能不支持/30语法,因此,请尝试将其更改为0,30

我在Ubuntu 14.04.1上遇到类似的问题,问题原来是我修改crontab的方式:

我使用的是sudo crontab -e而不是只是crontab -e ,这导致我的更改被忽略。

有类似的问题; 从命令行,它的工作,但从克朗,不行。

有一个“包括(”./connect.php“);在我的DB代码的东西的代码。

删除了,并将connect.php代码直接添加到php脚本,它从cron工作。

经过一天的困惑,为什么我的脚本会直接工作(发送电子邮件中的数据到Gmail帐户),我发现所有的故意发送工作,当我点击的URL和所有的cron发送到垃圾邮件。 不知道为什么,但我想我会分享它。