Php

當文件確實存在時,為什麼 crontab 會給出“沒有這樣的文件或目錄”錯誤?

  • October 30, 2018

在 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,它工作得很好……有什麼想法嗎?

第二個和第三個錯誤來自以下腳本中的第 3 行(我嘗試使用 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 位於同一目錄中

我正在使用 MAMP 和 PHP 5.3.5

謝謝你的幫助:?

您正在嘗試執行沒有有效shebang的腳本。

像這樣添加shebang作為腳本的第一行(當然調整路徑):

#!/usr/bin/php

或者將 crontab 條目更改為:

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

它在您的瀏覽器中執行的原因是因為您的伺服器配置為自動編譯和提供 PHP 文件。

另一方面,Cron 沒有那麼奢侈。預設情況下,它將執行您作為bash腳本放入其中的任何內容。

從您的 Cronjob 的外觀來看,您正在執行 PHP 文件而不使用php解析器,因此 Cron 嘗試將腳本作為bash腳本執行。

如果你把php -fPHP 腳本的位置放在前面,你是在告訴 Cron 使用這些php元件執行命令,你應該會發現它現在會執行。

或者,您可以編輯程式碼並將#!/usr/bin/php其添加到腳本的開頭。當 Cron 執行此文件時,它將php用於執行命令,而不是bash.

引用自:https://serverfault.com/questions/401311