-1

一連のコマンドを呼び出すスクリプトがあります。その中には、stdoutにノイズが多いもの、stderrにノイズが多いもの、両方にあるものがあります。スクリプトをcronで実行するつもりなので、ノイズが多く、エラー状態の場合にのみ毎日メールで送信する必要はありません。私もです:

be_quiet() {
  # save stderr in FD 3
  exec 3>&2 

  exec &> /dev/null
}

die() {
  # restore stderr
  exec 2>&3

  echo $* > /dev/stderr
  exit 1
}

次に、すなわち

be_quiet
mkdir -p $CLIENT_ROOT || die "Could not create client root."
cd $CLIENT_ROOT || die "Could not cd to client root."

エラーが発生した場合は具体的で意味のあるメッセージを受け取り、それ以外の場合は何も受け取らないようにすることを目的としています。しかし、私が今見ているのはただ

line 48: /dev/stderr: Permission denied

コマンドラインから実行すると、これは機能します。cron経由で実行すると、アクセス許可が拒否されたというメッセージが表示されます。理由はわかりません。

4

3 に答える 3

2

それ以外の

exec 2>&3

行う

exec 3>&-
于 2010-03-09T17:13:32.910 に答える
0

cronjob の stdout を /dev/null にリダイレクトしないのはなぜですか? be_quiet 関数を使用せず、die を次のように変更します。

die() {
    echo "$*" >&2
}

次に、cronjob で:

* * * * * /path/to/script.sh >/dev/null

スクリプトが die 関数を使用して何かを出力する場合にのみ、cron からメールを受け取る必要があります。

于 2010-03-11T00:22:11.017 に答える