1. 程式人生 > >將shell指令碼執行情況寫入Rsyslog日誌伺服器

將shell指令碼執行情況寫入Rsyslog日誌伺服器

在運維工作中,免不了編寫一些指令碼交由計劃任務(cron)去定時執行完成一些日常工作,實現運維工作自動化。比如在我的日常工作中備份資料是一項重要的工作,需要定時將資料備份到備份服器和一些其他的備份介質中。其中大部分的備份工作都是寫到腳本當中,並編輯/etc/crontab去定時完成備份任務。這樣節省了不少日常工作的壓力。
為了監控指令碼的執行情況,在編寫指令碼的時候將執行情況的情況追加寫入到本地指定的日誌檔案當中,定期去檢視這些檔案來確保任務被正確的執行。
但是,隨著需要備份的伺服器的增多,執行檢視日誌的工作就變成了一種負擔。通常是需要逐個登入每臺伺服器去檢查日誌檔案。
為了解決上述問題,我打算將所有的備份日誌寫入到一臺備份伺服器當中,這樣就可以實現日誌的集中收集管理和查看了。為些我在前幾天搭建了一臺日誌伺服器用來收集每臺伺服器的日誌資訊(請參見:

Centos6.7搭建Rsyslog日誌伺服器)。
日誌伺服器也搭建完了,問題也出現了,如何將指令碼中的執行情況寫入到日誌伺服器中呢?其實,由於日誌伺服器已經搭建完成,只需要將需要記錄資訊寫入到本地日誌系統,那麼本地rsyslog服務就會將日誌資訊同時寫入到遠端的日誌伺服器資料庫中。

將自定義的資訊寫入到本地日誌系統需要用到:logger 命令
logger 是一個shell 命令介面,可以通過該介面使用Syslog的系統日誌模組,還可以從命令列直接向系統日誌檔案寫入一行資訊。

使用方法舉例:

logger -it error  -p local5.info "hello world"

-i 在每行都記錄程序ID
-t 日誌中的每一行都加一個error標籤
-p 指定自定義的日誌裝置和日誌級別,相關內容參見文章附錄
最後一個引數中的雙引號(“”)中的文字內容就是自定義日誌資訊。在指令碼中針對命令的執行結果(echo $?)進行if判斷,然後使用logger輸出不同的日誌資訊即可。如:

umount -l /mnt
if [ `echo $?` -eq 0 ]; then
    logger -p local3.info "Umount /dev/sdd1 is OK!"
else
    logger -p local3.err "Umount /dev/sdd1 is Failure!"
fi

上面的指令碼是解除安裝U盤或者行動硬碟時用到的角本。根據 echo $? 的返回值,將 info 或者 err級別的自定義日誌資訊寫入到系統日誌中。配合Rsyslog伺服器使用就可以實現shell指令碼執行情況的集中收集與管理了。

附:日誌型別和日誌級別
日誌型別

日誌型別 說明
auth pam產生的日誌
authpriv ssh,ftp等登入資訊的驗證資訊
cron 時間任務相關
kern 核心
lpr 列印
mail 郵件
mark(syslog) rsyslog服務內部的資訊,時間標識
news 新聞組
user 使用者程式產生的相關資訊
uucp unix to unix copy, unix主機之間相關的通訊
local1~7 自定義的日誌裝置

日誌級別
從上到下,級別從低到高,記錄的資訊越來越少 詳細的可以檢視手冊: man 3 syslog

級別 說明 級別值
debug 有調式資訊的,日誌資訊最多 7
info 一般資訊的日誌,最常用
notice 最具有重要性的普通條件的資訊
warning 警告級別 4
err 錯誤級別,阻止某個功能或者模組不能正常工作的資訊
crit 嚴重級別,阻止整個系統或者整個軟體不能正常工作的資訊
alert 需要立刻修改的資訊
emerg 核心崩潰等嚴重資訊
none 什麼都不記錄

相關推薦

shell指令碼執行情況寫入Rsyslog日誌伺服器

在運維工作中,免不了編寫一些指令碼交由計劃任務(cron)去定時執行完成一些日常工作,實現運維工作自動化。比如在我的日常工作中備份資料是一項重要的工作,需要定時將資料備份到備份服器和一些其他的備份介質中。其中大部分的備份工作都是寫到腳本當中,並編輯/etc/cr

shell 指令碼執行python指令碼,連線hive提交資料寫入

使用說明 1.cd /opt/zy 在這個目錄下以root使用者許可權執行命令 2. 在SAP查詢的時候 Tcode:ZMMR0005 Purchase Org * PO Creating:2017/3/1 (開始日期) 2017/

【轉】通過ionice和nice降低shell指令碼執行的優先順序

對於一些執行時會造成系統滿載的指令碼, 例如資料庫備份, 會影響當時其他服務的響應速度, 可以通過ionice和nice對其IO優先順序和CPU優先順序進行調整例如降低"/usr/local/bin/backup.sh"的IO優先順序, 讓其他程序順暢執行: /usr/bin/ionice -c2 -

[轉載] Linux export變數的生命週期和shell的生命週期相同,即shell指令碼執行完畢後,相應的export變數便失效了

說說shell指令碼中的export 和 source,bash 小弟剛剛接觸linux,對linux上的很多東西都比較陌生,所以寫一寫部落格,當做自己工作的總結和技術的積累吧,也是鞭策自己不斷努力的去學習。 今天之所以起這個標題,把export,source ,bash這三個命令放在一起講

shell指令碼執行已有的其他指令碼檔案

工作中常遇到一些資料問題,需要各種指令碼去處理,各種先後順序,還要處理多個庫,還會遇到某個指令碼處理某個庫時報錯需要重新處理的問題,因此用一個shell把它們串起來就比較方便了 1.多個庫執行同一個指令碼 #/bin/bash city_array=('bj' 'sh' 'tj' )

shell指令碼執行sql檔案及語句

由於經常操作資料庫,遇到頻繁建表、加欄位、索引、修改資料等問題,大多是操作多個數據庫,sql檔案或語句不固定,最後選擇shell指令碼來執行 eg: 1.多庫建相同的表 #/bin/bash host='127.0.0.1' dbUser='root' dbPassword=

利用shell指令碼執行mongdb命令

用shell指令碼執行mongdb的renameCollection命令: 1、建立一個*.sh檔案 2、增加如下命令: #!/bin/bash mycol="test" mongo 127.0.0.1:27017/pica -u pica_user -p "[email 

shell指令碼~迴圈查出JAR 修改日誌

function echo_name(){   for file in `ls $1`   do #echo $1"/"$file filess=$1"/"$file cur_dateTime=`date +%Y%m%d%H%m%s` if [ "${filess##

springcloud 叢集部署jar檔案,shell指令碼執行

本文主要是記錄springcloud的註冊中心的高可用、叢集部署、專案打包jar檔案編寫shell指令碼進行部署。 首選我們準備一個註冊中心jar包,裡面有兩個配置檔案 application-eureka1.properties   : #服務埠 server.por

kylin調優,專案中錯誤總結,知識點總結,kylin jdbc driver + 資料庫連線池druid + Mybatis專案中的整合,shell指令碼執行kylin restapi 案例

關於本篇文章的說明: 本篇文章為筆者辛苦勞作用了一整天總結出來的文件,大家閱讀轉發的時候請不要吝嗇寫上筆者:塗作權 和 原文地址。 由於筆者所在環境沒有人用過kylin,筆者也是自學官網,閱讀書籍 將kylin用於實際專案,期間遇到了很多很多關於kylin使用的問題。為了讓後面的人在

shell指令碼執行返回的狀態碼

不管是在執行什麼樣語言編寫的程式,都需要獲得其被呼叫函式或程式的退出狀態或(及)返回值,以便於我們好根據退出狀態或(及)返回值判斷當前被呼叫的函式或程式的執行結果是否成功等,然後好做進一步的處理,如提示使用者出錯了,還是繼續執行等。這裡先就退出狀態和返回值做一下名詞解釋:退出狀態:執行某一函式或者程式之後通過

Shell指令碼執行Hive語句

#!/bin/bash #give the params: name value tablename if [ $# -eq 3 ] then name=$1 value=$2 tablename=$3 echo name=${name} echo value=${value} echo

Shell指令碼執行hive語句 | hive以日期建立分割槽表 | linux schedule程式 | sed替換檔案字串 | shell判斷hdfs檔案目錄是否存在

#!/bin/bash source /etc/profile; ################################################## # Author: ouyangyewei # #

使用shell指令碼執行hive、sqoop命令

1、test.sh指令碼內容如下: #!/bin/bash #CURR_DATE=`date +"%Y-%m-%d %H:%M:%S"`------>不能使用v_sql="insert into

在Oozie 中排程執行shell、hive 指令碼,以及通過shell指令碼執行hive/sqoop/shell指令碼的方法

  最近專案需要用到OOzie工具,可是找了好久,也沒有找到一個完整的、統一的解決和部署方案。經過努力,終於打通了其中的所有環節,解決了各種坑爹的問題。   首先,就專案需求做一個簡單的介紹:      專案需要從mysql中匯入資料到hive進行離線計算後,再導回到mys

shell指令碼執行hive命令傳值給sql檔案、shell傳參

使用場景,大資料平臺azkaban任務中通過shell指令碼呼叫sql檔案(尤其是呼叫多個sql時),希望可以傳參到sql檔案中 方法:本例以sh呼叫hive命令執行sql為例,道理相同 1、sh 檔案中執行hive -f 命令 將inputdate傳給sql檔案使用

Linux 上Shell 指令碼執行的一個問題(^M)

為了更好更實時的檢視Linux系統的資源消耗,在網上找到了一個別人寫的Shell,參考 https://www.cnblogs.com/xianhaiyuan/p/6323599.html , 存成檔案後,通過FillZilla傳遞到Linux伺服器上,不了執行時候遇到報錯

[Scala Shell指令碼執行]

    Scala語言來自於Scalable(可伸縮的),既可以寫一些小的指令碼,又可以寫一寫複雜的伺服器端的程式。scala支援原始檔解釋執行,jar執行,各有利弊。本文主要介紹咋Linux系統中Scala的Shell指令碼,Scala原始檔,Scala的Jar執行方法。一

Shell指令碼執行超時怎麼辦?

在Shell裡會有一種不太常見的情況,就是指令碼有時候會出現超時的現象。一般來說遇到這種問題,我們都會簡單粗暴的採用下面這種指令碼來當“超時看門狗“: 這個指令碼搭配兩個變數使用的話,監控一點小程式碼還算OK,但是它的邏輯還是比較粗糙,比如如果在這個指令碼執行的時候,又有了一個新的process

切換目錄Shell 指令碼執行有三種方法

bash 指令碼名 sh 指令碼名 chmod +x 指令碼名 使用下面語句測試 #a.sh(副檔名可不要) cd / pwd echo "complete" 然而具體執行時候,發現過程中改變過路徑,然而最終結果是並沒有改變路徑。 [[e