GNU/Linux >> Linux の 問題 >  >> Linux

Gitが実際のエラーをスローした場合にのみメールCron出力?

あるサーバー上にGitリポジトリが存在するため、別のサーバー上でdoxygen出力を生成したいと考えています。次のコマンドは私には機能しますが、Gitが進行状況のレポートにstderrを使用するため、リポジトリが更新されるたびにメールを送信するという欠点があります(全能のオラクルによるクイック検索は、この動作を機能と見なしていることを示しています)。

59 * * * * cd FQNameOfRepo; git pull 1>/dev/null; make doc-all 1>/dev/null; cp doc/latex/refman.pdf doc/html/

grepはできましたが Gitのstderr出力を介して、または既知の文字列と比較すると、これは間違っているようです。間違ったGitコマンドを使用していますか?これはどのように適切に行われますか?

明確にするために、実際のエラーが発生した場合でもこのコマンドでメールを送信したいので、stderrをリダイレクトするだけでは役に立ちません。

承認された回答:

crondのメール機能に依存しすぎると、さまざまな問題が発生する可能性があります。 cronによっては、柔軟性が十分でない可能性があります。

たとえば、多くの場合、説明したように、終了ステータス!=0のみがstdout/stderrのメール送信をトリガーするように構成することはできません。もう1つの問題は、たとえば、Solaris crondには、キャプチャ/メール送信する出力に(比較的)小さいサイズ制限があることです。

したがって、このような状況では、コマンドを呼び出して出力を一時ログファイルにリダイレクトする小さなヘルパースクリプトを作成することをお勧めします。すべてのプログラムの終了ステータスを内部的に追跡でき、いずれかが!=0の場合は、次のいずれかになります。

  • ログファイルをstdoutにキャットします
  • コマンドラインメールツールを使用してメールで送信
  • または、ログファイルの場所を含む短い診断を出力するだけです

次のようなもの:

$ cat helper.sh
set -u
set -e

# setup log-file $LOG
# ...

cd FQNameOfRepo
set +e

git pull 1>/dev/null 2>> $LOG
r1=$?
make doc-all 1>/dev/null 2>> $LOG
r2=$?
cp doc/latex/refman.pdf doc/html/ 2>> $LOG
r3=$?

set -e

if [ $r1 -ne 0 -o $r2 -ne 0 -o $r3 -ne 0 ]; then
    # do some stuff, print/mail $LOG or something like that, etc.
    # ...
    exit 23
fi

Linux
  1. Linuxでのcron認証失敗エラーを修正するにはどうすればよいですか?

  2. Crontabの@rebootはルートに対してのみ機能しますか?

  3. SFTP エラー 受信メッセージが長すぎます

  1. 致命的なエラーを返す git add:外部リポジトリ エラー

  2. tput:$TERM の値がなく、CRON プロセスによって記録された -T 指定されたエラーがありません

  3. gcsfuse 入出力エラー

  1. エラー:'wrapt' をアンインストールできません。 tensorflow-gpu~=1.14 インストール時

  2. git の使用時にユーザー名のプロンプトをスキップする

  3. archlinux で X サーバーをセットアップする際の startx エラー