Webベースの予約システムの一部として、毎日PHPスクリプトを実行するためにcronジョブを設定しようとしています。 crontabでは、次のコマンドを使用して複数のApacheサーバーで長年にわたって完全に機能しました。
0 3 * * * wget -q -O /dev/null http://www.my_other_domain.org.uk/scheduled/my_script.php
私は他のApacheサーバーにスクリプトをインストールしましたが、ブラウザを介して呼び出すと正しく実行されます。ただし、cronを使用しようとすると、cronデーモンは次のメッセージを表示します。
-: warning: setlocale: LC_ALL: cannot change locale (en_GB.utf-8)
-: wget: command not found
私が試したとき
0 3 * * * /usr/bin/env wget -q -O /dev/null http://www.mydomain.org.uk/scheduled/my_script.php
次のメッセージを受け取りました。
-: warning: setlocale: LC_ALL: cannot change locale (en_GB.utf-8)
-: /usr/bin/env: No such file or directory
まず、setlocale警告が問題とは関係がないと仮定するのは正しいですか?
私も試しました
0 3 * * * /usr/bin/php /var/www/vhosts/mydomain/httpdocs/scheduled/my_script.php
これは作る
-: /usr/bin/php: No such file or directory
また、スクリプトの最初の行にshebangを置き、cronからフルパスとして呼び出すようにしてみました。 cronデーモンは/ [full_path] / my_script.phpにそのファイルやディレクトリがないことを報告します。
カールを使うのはあまり良くありません。
サーバーへのシェルアクセス権がなく、Pleskコントロールパネルを介してcronジョブを設定しました。クローンジョブが予定通りに実行されているようです。システム管理者は私のために次のことをしました。
#which php
/usr/bin/php
#which wget
/usr/bin/wget
#which curl
/usr/bin/curl
これは、コマンドが正しい場所にあることを確認するようです。
上記は簡単な歴史です。試した順列と組み合わせの数を忘れてしまいました。ほとんどは、このフォーラムと他のフォーラムでアドバイスを読んだ結果でした。
cronジョブがコマンドを見つけることができず、解決策を提案できない理由を教えてください。
答え1
PATH
シェルは、環境に設定されている内容を確認して、実行可能ファイルを見つける場所を知っています。cron
同じ環境を共有しないでください。これをcrontabの上部に追加すると、予想されるコマンドが見つかる場所を教えてくれます。
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
答え2
報告された症状によれば、これは損傷の余地がなく、PATH
影響を与えません/usr/bin/env
。しかし、あなたのレポートが一貫していないので、確信するのは難しいです。/usr/bin/env
それとも書きましたかusr/bin/env
?
crontabにASCII文字のみが含まれており、区切れないスペースや印刷できない文字がないことを確認してください。また、PATH
またはなど、問題を引き起こす可能性があるいくつかの環境変数が定義されていないことを確認してくださいLD_LIBRARY_PATH
。
/usr/bin/env: No such file or directory
サーバーに修正できない誤った設定があるという強力な兆候がある場合。サーバーの仮想環境またはセキュリティフレームワークでは、少なくともcronでコマンドを実行することはできません。サーバーが実行されている環境の種類がわからない場合、どのような問題が発生するのかを知ることはできません。これはシステム管理者が解決しなければならない問題です。
このsetlocale
エラーは問題の原因ではありませんが、他のエラーの症状である可能性が高いです。