1

スケジュールされた cron ジョブを実行し、出力を少数のユーザーに電子メールで送信しようとしています。ただし、何か新しいことが起こった場合にのみ、ユーザーに電子メールを送信したいと考えています。

本質的に、これは何が起こるかです:

Python スクリプトを実行すると、FTP サーバー上のファイル名がチェックされます。ファイル名が異なる場合は、ファイルをダウンロードして情報の解析を開始します。以前にダウンロードしたファイルのファイル名は last.txt に保存されます。実際に新しいファイルが見つかった場合は、last.txt のファイル名を更新するだけです。

ファイル名が同じ場合、処理を停止し、ファイルが同じであることを出力します。

基本的に、私の考えは、次のようなことができるということでした。

cp last.txt temp.last.txt | python script.py --verbose > report.txt | diff last.txt temp.last.txt

しかし、それは私が立ち往生したところです。基本的に、2 つのファイルを比較したいのですが、それらが同じ場合は何も起こりません。ただし、それらが異なる場合は、mail コマンドを使用して report.txt の内容をいくつかの電子メール アドレスに電子メールで送信できます。

うまくいけば、事前に感謝します。

4

1 に答える 1

2

まず第一に|、コードにパイプは必要ありません。各コマンドを個別に発行する必要があります。セミコロンで区切るか、スクリプトの別の行に記述します。

問題自体の場合、1 つの解決策は、diff の出力を次のようなレポート ファイルにリダイレクトすることです。

cp last.txt temp.last.txt 
python script.py --verbose > report.txt
diff last.txt temp.last.txt > diffreport.txt

ここで説明されているように、レポート ファイルが空かどうかを確認できます: http://www.cyberciti.biz/faq/linux-unix-script-check-if-file-empty-or-not/

結果に基づいて、diffreport.txt と report.txt を送信するか、すべて削除することができます。

以下は、cron ジョブ スクリプトがどのように見えるかの簡単な例です。

#!/bin/bash

# Run the python script
cp last.txt temp.last.txt
python script.py --verbose > report.txt
diff last.txt temp.last.txt > diffreport.txt

# Check if file is empty or not
if [ -s "diffreport.txt" ]
then
    # file is not empty, send a mail with the attachment
    # May be call another script that will take care of this task.
else
    # file is empty, clean up everything
    rm diffreport.txt report.txt temp.last.txt
fi
于 2013-07-28T20:12:57.820 に答える