イムPHPからcronジョブを作成しようと、私はcrotanbためにこれを追加しました:cronジョブの実行PHPのエラー
にsudoのcrontab -u WWW-データ-l:
*/1 * * * * /usr/bin/php /var/www/html/service_script/cronTest.php
cronTest.php
<?php
echo 'it works';
include_once('../core/external_init.php');
そして、これが出力されます。
it works
PHP Warning: include_once(../core/external_init.php): failed to open stream: No such file or directory in /var/www/html/service_script/cronTest.php on line 3
PHP Warning: include_once(): Failed opening '../core/external_init.php' for inclusion (include_path='.:/usr/share/php') in /var/www/html/service_script/cronTest.php on line 3
PHP Fatal error: Uncaught Error: Class 'pluginClassManagement' not found in /var/www/html/service_script/cronTest.php:6
Stack trace:
#0 {main}
thrown in /var/www/html/service_script/cronTest.php on line 6
このcronTest.phpは、ブラウザから実行すると動作します。 Iが、/ usr/libに/ PHPには/ usr/bin/phpを変更した場合は、私が代わりにこのエラーが出る:
/bin/sh: 1: /usr/lib/php: Permission denied
私は本当にここがどうあるべきか、パスを知りません。
私はPHP7を持って、
cronから実行するときは、絶対パスを使用する方がよいでしょう。 cliで実行すると、相対パスは現在の作業ディレクトリを参照します。 '/ usr/bin/php'の部分は、' php/var/www/... 'のように' php'を置くだけです。 – frz3993
@ frz3993絶対パスはめったに良い考えではありません。それはあなたのコードを理由なしで移植性のないものにします。相対パスはこれで完璧です。つまり、インクルードパスの設定です。あなたは(通常)httpサーバとphpのコマンドラインバージョン用に別々のphp.iniファイルがあることに注意してください。これにより、異なるインクルードパスの定義が可能になります。これにより、ローカルシステムに固有の設定が行われます。これは完全に意味があります。 – arkascha
'/ usr/lib/php'は意味をなさない。 cronジョブからPHPインタープリタを実行したいということに注意してください。つまり、実行可能なスタンドアロンの "プログラム"が必要です。これは、 "開始"または実行することができます。ご使用のシステム上でphp cli実行可能ファイルがどこにあるか確認してください。それにはシステムソフトウェア管理システムを使用してください。 – arkascha