如何在ubuntu上定時抓取錯誤日志并發(fā)至管理員信箱

介紹

我希望在ubuntu服務器上部署的nginx + uwsgi應用,運行出現(xiàn)錯誤時我能盡快知道并解決。應用運行中,運行日志保存在/tmp/ypk.log文件中,若出新錯誤,日志中會寫入如DataError: invalid input syntax for type date: "3年"……類似記錄。我的思路是定時掃描這個日志文件,如果出現(xiàn)新的Error關鍵字,就將相關的信息發(fā)至我的郵箱。這樣的任務,非Shell腳本語言不能實現(xiàn)。

Shell腳本語言介紹

Shell腳本,又稱Shell命令稿、程序化腳本,是一種電腦程序與文本文件,內容由一連串的shell命令組成,經(jīng)由Unix Shell直譯其內容后運作。被當成是一種腳本語言來設計,其運作方式與直譯語言相當,由Unix shell扮演命令行解釋器的角色,在讀取shell腳本之后,依序運行其中的shell命令,之后輸出結果。利用shell腳本可以進行系統(tǒng)管理,文件操作等。在Unix及所有的類Unix系統(tǒng)中,如Linux、FreeBSD等操作系統(tǒng),都存在shell腳本。依照Unix shell的各種不同類型,shell腳本也有各種不同方言。在DOS、OS/2、Microsoft Windows中的批處理文件,跟shell腳本有類似的功能。

腳本中用到的命令

  • grep, Linux系統(tǒng)中grep命令是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹 配的行打印出來。grep全稱是Global Regular Expression Print,表示全局正則表達式版本,它的使用權限是所有用戶。
  • sendemail, 郵件發(fā)送工具,可以看這篇文章如何在ubuntu上使用sendemail發(fā)送郵件。
  • comm, 逐行比較兩個文件的內容。

腳本的程序流程

程序流程

腳本

#!/bin/bash

# 判斷ypk_error是否存在
if [ ! -e /tmp/ypk_error ]; then
  # 如果不存在,在系統(tǒng)日志中搜索Error關鍵字,保存到文件ypk_error中
  grep -n Error /tmp/ypk.log > /tmp/ypk_error
  # 判斷 ypk_error 是否為空
  if [ -s /tmp/ypk_error ]
  then
    # 非空,發(fā)送給系統(tǒng)管理員
    sendemail -f 發(fā)件人地址 -t 管理員郵箱 -u "ypk error log" -s smtp服務器 -o tls=yes -xu 用戶名 -xp 密碼 -m < /tmp/ypk_error
  fi
# 如果ypk_error文件已經(jīng)存在
else
  # 與新生成文件比較,比較結果寫入diff文件
  comm -23 <(grep -n Error /tmp/ypk.log) /tmp/ypk_error > /tmp/diff
  if [ -s /tmp/diff ]
  then
    # 如果比較結果非空,則發(fā)送
    sendemail -f 發(fā)件人地址 -t 管理員郵箱 -u "ypk error log" -s smtp服務器 -o tls=yes -xu 用戶名 -xp 密碼 -m < /tmp/diff
    # 生成新的ypk_error文件
    grep -n Error /tmp/ypk.log > /tmp/ypk_error
  fi
fi

設為定時運行

編輯ubuntu crontab定時腳本:

crontab -e

設為每小時的30分執(zhí)行一次:

30 * * * * /home/user/send_ypk_err.sh

運行結果

2017-12-26 16-06-23屏幕截圖.png

OK。

本文參考了這篇文章。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容