cronジョブがデフォルトのLinuxコマンドを見つけることができないのはなぜですか? [閉鎖]

cronジョブがデフォルトのLinuxコマンドを見つけることができないのはなぜですか? [閉鎖]

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エラーは問題の原因ではありませんが、他のエラーの症状である可能性が高いです。

関連情報