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

おすすめ記事