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

2022-08-30 20:11:23

我已经构建了一个php文件来检查一些结果,所以我需要设置一个cronjob。

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

以下是我设置 crontab 的方法:

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

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


答案 1

鉴于

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

它不起作用的原因有多种:

  1. 首先,重要的是要检查是否简单执行。这是必需的。但不幸的是,实现这一点并不意味着问题得到了解决。php /var/www/html/result.php

  2. 必须添加二进制文件的路径。php

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

    更改为

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

    或任何来自 .which php

  3. 检查脚本对运行 crontab 的用户的权限。

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

  4. 为了更安全,您还可以在脚本顶部添加php路径,例如:

    #!/usr/bin/php -q
    <?php
    
     ...
    
    ?>
    
  5. 确保用户有权使用 crontab。检查他是否在文件中。另外,做一个基本的测试,看看它是crontanb还是php问题。/etc/cron.d/deny

    * * * * * touch /tmp/hello
    
  6. 按照 William Niu 的建议,将脚本的结果输出到日志文件。

    */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
    
  8. 确保 crontab 中的格式正确。例如,您可以使用网站Crontab.guru


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


答案 2

这可能是因为php不在路径中。 有一个非常小的.因此,请包含 php 程序的完整路径。crontabpath

您可以通过将输出连接到文件来测试cron命令,例如

*/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

此外,并非所有平台都支持语法,因此,请尝试将其更改为语法。/300,30


推荐