即使文件确实存在,Cron 作业也会出现“没有此文件或目录”错误?

即使文件确实存在,Cron 作业也会出现“没有此文件或目录”错误?

在 crontab 中运行以下作业后,我在 /var/mail/username 中的错误消息中收到以下三行...

15 * * * * /Applications/MAMP/htdocs/iconimageryidx/includes/insertPropertyRESI.php

错误:

/applications/mamp/htdocs/iconimageryidx/includes/insertpropertyRESI.php: line 1: ?php: No such file or directory
/applications/mamp/htdocs/iconimageryidx/includes/insertpropertyRESI.php: line 3: syntax error near unexpected token `'initialize.php''
/applications/mamp/htdocs/iconimageryidx/includes/insertpropertyRESI.php: line 3: `require_once('initialize.php');

我尝试执行的 PHP 脚本确实存在,而且我已多次确保拼写正确。我之前在另一个脚本上运行过 crontab,运行得很好...有什么想法吗?

第二和第三个错误来自以下脚本(我尝试使用 crontab 运行的脚本)的第 3 行:

<?php
    require_once('initialize.php');
    require_once('insertPropertyTypes.php');

    $sDate;
    if(isset($_GET['startDate'])) {
        $sDate = $_GET['startDate'];
    } else {
        $sDate = '';
    }

    $insertResi = new InsertPropertyTypes('Listing', $sDate, 'RESI');
?>

当我运行脚本时插入属性RESI.php在浏览器中,它运行良好???此外,initialize.php 和 insertPropertyTypes.php 与 insertPropertyRESI.php 位于同一目录中

我正在使用 MAMP 和 PHP 5.3.5

谢谢你的帮助:?

答案1

您正在尝试执行没有有效舍邦.
将 shebang 添加为脚本的第一行,如下所示(当然要调整路径):

#!/usr/bin/php

或者将 crontab 条目更改为:

15 * * * * /usr/bin/php /Applications/MAMP/htdocs/iconimageryidx/includes/insertPropertyRESI.php

答案2

它在您的浏览器中运行的原因是您的服务器配置为自动编译和提供 PHP 文件。

另一方面,Cron 没有这种奢侈;默认情况下,它将运行您以bash脚本形式输入的任何内容。

从你的 Cronjob 来看,你在没有使用解析器的情况下运行 PHP 文件php,因此 Cron 尝试将该脚本作为bash脚本运行。

如果你php -f在 PHP 脚本的位置前面加上,你就是在告诉 Cron 使用各个php部分来运行该命令,你会发现它现在就会运行。

或者,您可以编辑代码并将其添加#!/usr/bin/php到脚本的开头。当 Cron 运行此文件时,它将使用php来运行命令,而不是bash

答案3

在命令行上运行 php 文件与在 apache 等 Web 服务器中运行它不同。要在命令行上运行 php 脚本,您需要:

  1. 安装 php-cli 包,因为它可能未默认安装。
  2. 确保第一行有注释‘!#/usr/bin/php’,并确保在 php 脚本上设置了‘x’权限。
  3. 除了上述方法之外,你还可以通过 'php your_script' 来调用脚本来运行它。

相关内容