以下のようなシェルスクリプトがあります
echo "Hello World"
スクリプトは次の/root/scripts/
フォルダーにあります。test.sh
以下のようなcronジョブも作成しました
0-59 * * * * ./scripts/test.sh
現在、cron ジョブはtest.sh
毎分コンテンツを印刷していません。
間違ったディレクトリを指定したかどうか、またはコードに他の問題があるかどうかをお知らせください。
以下のようなシェルスクリプトがあります
echo "Hello World"
スクリプトは次の/root/scripts/
フォルダーにあります。test.sh
以下のようなcronジョブも作成しました
0-59 * * * * ./scripts/test.sh
現在、cron ジョブはtest.sh
毎分コンテンツを印刷していません。
間違ったディレクトリを指定したかどうか、またはコードに他の問題があるかどうかをお知らせください。
私は...するだろう
/root/scripts/test.sh
。cronが現在のディレクトリと見なすものがわかりません...test.sh > /tmp/cron.log
、ある段階でstderrをリダイレクトすることもできます2>&1
)。そうしないと、出力が表示されません。cronjobの所有者にメールで送信されますchmod +x /root/scripts/test.sh
)#!/bin/sh
。cronで実行するものを取得するのは、悪名高いトリッキーです。cronジョブは、大幅に削減された環境で実行されます。スクリプトで利用可能な環境を印刷して(使用env
)、インタラクティブシェルから利用できる環境と比較/対比することは有益です。
cron を使用してスクリプトを起動するときに新しい UNIX ユーザーが遭遇する一般的な問題は、cron ジョブがユーザー シェルと同じ環境にアクセスできないことです。したがって、ユーザーのシェルで実行されたスクリプトは完全に機能しますが、cron から起動すると失敗します。この場合の最大の原因は、シェルの $PATH 環境変数が cronjob のシェルのものと異なることです。
テストするには、'/bin/echo $PATH > myShellPath' を実行します。cron で「/bin/echo $PATH > myCronPath」を実行します。myShellPath と myCronPath を比較してください。
提供された例では、スクリプトは echo を実行します。これは私の CENTOS6 システムでは /bin の下にあります。echo コマンドは、シェルが $PATH 環境変数にリストされているディレクトリの 1 つで「echo」ファイルを検索することによって検出されます。cronjob の $PATH 環境変数に /bin が含まれていない場合、echo コマンドは失敗します。
これが問題である場合、最も簡単な解決策は、スクリプトでパスを明示的に「echo」に設定することです。システムの echo のフル パスを表示するには、シェルで「which echo」と入力します。
例:
[countChocula@bozo ~]$ which echo
/bin/echo
この場合、スクリプトを編集して「echo」を「/bin/echo」に置き換えます。さらに良いのは、スクリプトに $PATH 変数を設定して、echo が存在するディレクトリを含めることです。
詳細については、「実行中のシェルと環境変数の設定方法」、「cron が使用しているシェルと cron 環境変数の設定方法」、「cron ジョブの環境変数の表示方法」を調べてください。
使用する必要があります
* * * * * /path/to/scriptFile
毎分スクリプトを実行する
所有者がスクリプトを実行する許可を持っていない場合は、スクリプトフォルダーの所有者を確認し、許可を与えるか、許可を持つ所有者を変更します