2011-01-05 83 views
1

我編寫了一個python腳本來監視CentOS服務器上的某個特定值的日誌文件,並在發現它時發送一封電子郵件。它每5分鐘運行一次cron。如何睡眠一個作爲cronjob運行的python腳本?

我的問題是,在發送第一封電子郵件後,讓腳本進入睡眠狀態的最佳方式是什麼。我不希望它每5分鐘發送一次電子郵件,但它需要醒來並在一小時左右後再次檢查日誌。這是假設問題可以在一個小時內解決。接收電子郵件的人員沒有shell訪問權限來禁用cron。

我想過睡眠,但我不確定cron是否會嘗試再次運行腳本,如果另一個進程處於活動狀態(睡眠)。

回答

2

@Lennart,@S。 Lott:我認爲這個問題有點反其道而行 - 腳本每五分鐘運行一次cron作業,但在發送錯誤電子郵件後,至少一小時內不應再發送另一個作業(即使錯誤狀態持續存在) 。

顯而易見的答案,我想,是保存自日誌 - 針對檢測到的每一個問題,一個ID和電子郵件發送的最後時間的時間戳。當檢測到問題時,檢查自我日誌;如果此問題ID的最後一封電子郵件不到一小時前,請不要發送電子郵件。然後你的程序可以正常退出,直到被cron再次調用。

+0

我認爲這是我會嘗試和實施的方法。我將添加一條語句來檢查腳本開始處的日誌,並且只在時間戳超過一個小時時才繼續。 – ppyhd 2011-01-05 21:14:23

4

cron將再次運行該腳本。你需要更仔細地考慮這一點,而不僅僅是「睡眠」和「每10分鐘發送一次電子郵件」。

你需要寫出你的用例。

  1. 系統發送消息並且用戶做某事。

  2. 系統發送消息,用戶什麼也不做。爲什麼再次給用戶發郵件? 2封電子郵件不會做什麼?也許你應該發短信或給別人發電子郵件。

用戶如何註冊某件事情?他們將如何取消或停止這一消息循環?

如果在日誌中發現了某些內容,則會發送一封電子郵件,然後(在睡眠完成之前)在日誌中再次找到該內容。這是第二封電子郵件嗎?這是兩起事件。或者那是一封有兩件事件的電子郵件?

+0

這些都是好的一點,如果一小時內沒有處理這個條件,那麼第二封郵件就可以發送出去,而這個郵件可以發送給更廣泛的用戶。他們將通過修復生成日誌消息的問題來停止消息。 – ppyhd 2011-01-05 21:06:29

0

您每五分鐘運行一次。你爲什麼要睡覺?退出。如果您想確保它不會每隔五分鐘發送一次電子郵件,那麼如果有任何要發送的內容,程序只會發送一封電子郵件。

如果你睡了一個小時,每隔五分鐘運行一次,一小時後你將會運行12份(併發送12封電子郵件),這顯然不是前進的方式。 :-)

1

當您的腳本發送電子郵件時,使它也創建一個txt文件「email_sent.txt」。然後在發送電子郵件之前檢查是否存在此txt文件。如果存在,請勿發送電子郵件。如果不存在,請發送電子郵件並創建文本文件。

的文本文件作爲一個指標,電子郵件已經發送,不需要再次發送。

+0

我想過這個,但我該如何重置條件?我需要在一個小時後刪除txt文件或者具有讀取文件時間戳的邏輯。 – ppyhd 2011-01-05 21:08:52

0

另一種方式去了解,這可能是運行腳本作爲一個守護進程,而不是有cron運行它每隔五分鐘,把你的邏輯循環。像這樣的東西...

while True: 
    # The check_my_logfile() looks for what you want. 
    # If it finds what you're looking for, it sends 
    # an email and returns True. 
    if check_my_logfile(): 
    # Then you can sleep for 10 minutes. 
    time.sleep(600) 
    # Otherwise, you can sleep for 5 minutes. 
    else: 
    time.sleep(300) 
0

由於您正在監視日誌文件,因此可能需要檢查已經執行日誌文件監視的事情。 Logwatch是其中之一,但也有日誌分析工具,用於處理所有這些事情對你:

http://chuvakin.blogspot.com/2010/09/on-free-log-management-tools.html

是一些選擇一個好的總結。他們會對人們大喊大叫。還有系統監視工具,如opennms或nagios等,他們也做這些事情。

我跟別人有上面說的同意,基本上和cron始終運行在指定的時間的工作,有一個叫工具在它可以讓你在未來運行的作業,所以,你可以批量作業5分鐘,然後在運行時決定什麼時候需要再次運行,並在任何時候再次運行時(無論是5分鐘,10分鐘還是一小時)提交一份工作。你仍然需要保持某個地方的狀態(比如@infrared所說的),以便知道什麼時候發送了什麼,以及如果你應該關心一些。

我仍然建議使用系統監視工具,它可以很容易地增長和縮放,並且可以處理能夠說'我正在處理XX現在停止對我大喊大叫'的人。

祝你好運!

相關問題