![即使文件确实存在,Cron 作业也会出现“没有此文件或目录”错误?](https://linux22.com/image/588009/%E5%8D%B3%E4%BD%BF%E6%96%87%E4%BB%B6%E7%A1%AE%E5%AE%9E%E5%AD%98%E5%9C%A8%EF%BC%8CCron%20%E4%BD%9C%E4%B8%9A%E4%B9%9F%E4%BC%9A%E5%87%BA%E7%8E%B0%E2%80%9C%E6%B2%A1%E6%9C%89%E6%AD%A4%E6%96%87%E4%BB%B6%E6%88%96%E7%9B%AE%E5%BD%95%E2%80%9D%E9%94%99%E8%AF%AF%EF%BC%9F.png)
在 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 脚本,您需要:
- 安装 php-cli 包,因为它可能未默认安装。
- 确保第一行有注释‘!#/usr/bin/php’,并确保在 php 脚本上设置了‘x’权限。
- 除了上述方法之外,你还可以通过 'php your_script' 来调用脚本来运行它。