2013-07-28 60 views
1

我試圖運行計劃的cron作業並將輸出發送給一些用戶。但是,如果發生新的事情,我只想給用戶發送電子郵件。如果兩個文件內容不同,如何運行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

雖然這就是我陷入困境的地方。基本上我想區分這兩個文件,如果它們是相同的 - 沒有任何反應。但是,如果它們不同,我可以通過郵件命令將report.txt的內容通過電子郵件發送到幾個電子郵件地址。

希望我已經足夠詳細了,謝謝!

回答

2

首先,您的代碼中不需要管道|,您應該分別發出每個命令。 用分號分隔它們或將它們寫在腳本的單獨行上。

對於問題本身,一個解決辦法是把分差的輸出重定向至一個報告文件:

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 
+0

看起來像我遇到的問題與該腳本會立即嘗試diff的,而實際上python腳本是事實未完成運行。有任何想法嗎? – Chris

+0

當然!問題在於管道「|」。 – Bichoy

+0

你不應該在管道之後放置diff這意味着標準輸出重定向。管道以流水線方式工作,並在python腳本的第一行輸出後馬上執行其available = diff處理輸出。 – Bichoy

相關問題