为什么当文件存在时,crontab给出“没有这样的文件或目录”错误?

在以下作业在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运行的):

 <?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'); ?> 

当我在浏览器中运行脚本insertPropertyRESI.php时,它运行得很好吗? 另外,initialize.php和insertPropertyTypes.php与insertPropertyRESI.php在同一个目录下

我正在使用PHP 5.3.5的MAMP

thakns的帮助:?

您正试图执行没有有效的shebang的脚本。
添加shebang作为这样的脚本的第一行(当然调整path):

 #!/usr/bin/php 

或者将crontab项更改为:

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

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

克朗另一方面,没有那种奢侈; 默认情况下它会运行任何你放入它作为一个bash脚本。

从你的Cronjob的外观来看,你正在运行PHP文件,而不使用phpparsing器,因此Cron试图将脚本作为bash脚本运行。

如果你把php -f放在PHP脚本的前面,你要告诉Cron使用php部分来运行这个命令,你应该会发现它现在会运行。

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

在命令行上运行一个php文件与在apache之类的web服务器上运行它不同。 要在命令行上运行一个php脚本,你需要:

  1. 安装软件包php-cli,因为这可能不会默认安装。
  2. 确保在第一行中有“!#/ usr / bin / php”注释,并确保在你的php脚本中设置了“x”权限。
  3. replace为2,您只需通过使用'php your_script'调用脚本来运行脚本