4

以下のようなシェルスクリプトがあります

 echo "Hello World"

スクリプトは次の/root/scripts/フォルダーにあります。test.sh

以下のようなcronジョブも作成しました

  0-59 * * * *  ./scripts/test.sh

現在、cron ジョブはtest.sh毎分コンテンツを印刷していません。

間違ったディレクトリを指定したかどうか、またはコードに他の問題があるかどうかをお知らせください。

4

4 に答える 4

7

私は...するだろう

  1. 明示的にしてください。たとえばから実行するディレクトリ/root/scripts/test.shcronが現在のディレクトリと見なすものがわかりません
  2. stdoutをログファイルにリダイレクトします。たとえば...test.sh > /tmp/cron.log、ある段階でstderrをリダイレクトすることもできます2>&1)。そうしないと、出力が表示されません。cronjobの所有者にメールで送信されます
  3. bashスクリプトに実行権限が付与されていることを確認してください(chmod +x /root/scripts/test.sh
  4. どのスクリプト実行可能ファイルがシェルスクリプトを実行するかを明示してください。上部にスクリプト呼び出しを配置することをお勧めします#!/bin/sh

cronで実行するものを取得するのは、悪名高いトリッキーです。cronジョブは、大幅に削減された環境で実行されます。スクリプトで利用可能な環境を印刷して(使用env)、インタラクティブシェルから利用できる環境と比較/対比することは有益です。

于 2012-08-13T10:02:37.223 に答える
3

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 ジョブの環境変数の表示方法」を調べてください。

于 2014-04-05T16:10:28.100 に答える
1

使用する必要があります

* * * * * /path/to/scriptFile

毎分スクリプトを実行する

所有者がスクリプトを実行する許可を持っていない場合は、スクリプトフォルダーの所有者を確認し、許可を与えるか、許可を持つ所有者を変更します

于 2013-08-31T04:36:25.067 に答える