为什么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发送到垃圾邮件。 不知道为什么,但我想我会分享它。