web-dev-qa-db-ja.com

ファイルが存在するときにcrontabで「そのようなファイルまたはディレクトリはありません」というエラーが表示されるのはなぜですか?

次のジョブが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を使用しています。

助けをありがとう:?

4
Danny Bullis

有効な Shebang がないスクリプトを実行しようとしています。
このようにスクリプトの最初の行としてシバンを追加します(もちろんパスを調整します):

#!/usr/bin/php

または、crontabエントリを次のように変更します。

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

これがブラウザで実行される理由は、サーバーが自動的にコンパイルされ、PHPファイルを提供するように構成されているためです。

一方、Cronにはそのような贅沢はありません。デフォルトでは、bashスクリプトとして入力したものをすべて実行します。

Cronjobの外観から、phpパーサーを使用せずにPHPファイルを実行しているため、Cronはbashスクリプトとしてスクリプトを実行しようとします。

PHPスクリプトの場所の前にphp -fを置くと、Cronにphpパーツを使用してコマンドを実行するように指示します。これで実行できることがわかります。

または、コードを編集して、スクリプトの先頭に#!/usr/bin/phpを追加することもできます。 Cronがこのファイルを実行すると、phpではなくbashを使用してコマンドを実行します。

2
qweet

コマンドラインでphpファイルを実行することは、ApacheなどのWebサーバー内で実行することとは異なります。コマンドラインでphpスクリプトを実行するには、次のことを行う必要があります。

  1. これはデフォルトではインストールされない可能性があるため、php-cliパッケージをインストールします。
  2. 最初の行にコメント「!#/ usr/bin/php」があり、phpスクリプトに「x」権限が設定されていることを確認してください。
  3. 2の代わりに、「php your_script」を使用してスクリプトを呼び出すだけで実行できます。
2
Khaled