次のジョブがcrontabで実行された後、/ var/mail/usernameのエラーメッセージに次の3行が表示されます...
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を実行したところ、問題なく動作しました。 。何か案は??
2番目と3番目のエラーは、次のスクリプトの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と同じディレクトリにあります。
PHP 5.3.5でMAMPを使用しています。
助けをありがとう:?
有効な 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スクリプトの場所の前にphp -f
を置くと、Cronにphp
パーツを使用してコマンドを実行するように指示します。これで実行できることがわかります。
または、コードを編集して、スクリプトの先頭に#!/usr/bin/php
を追加することもできます。 Cronがこのファイルを実行すると、php
ではなくbash
を使用してコマンドを実行します。
コマンドラインでphpファイルを実行することは、ApacheなどのWebサーバー内で実行することとは異なります。コマンドラインでphpスクリプトを実行するには、次のことを行う必要があります。