Flume 日誌採集啓動停止指令碼

2020-08-11 22:43:30
  1. 背景
    一般我們在實際的生產環境中,進行日誌採集的時候一般都是,寫一個指令碼的,不可能一臺一臺機器上去登錄進行開啓flume或者停止flume,那樣效率就太低了,於是我們就需要開發一個指令碼來啓動和關閉。

    #! /bin/bash
    
    case $1 in
    "start"){
           for i in s102 s103
           do
                   echo " --------啓動 $i 採集flume-------"
                   ssh $i "nohup /opt/module/flume/bin/flume-ng agent --conf-file /opt/module/flume/conf/file-flume-kafka.conf --name a1 -Dflume.root.logger=INFO,LOGFILE >/dev/null 2>&1 &"
           done
    };;	
    "stop"){
           for i in s102 s103
           do
                   echo " --------停止 $i 採集flume-------"
                   ssh $i "ps -ef | grep file-flume-kafka | grep -v grep |awk '{print \$2}' | xargs kill"
           done
    
    };;
    esac
    
  2. 這裏面的啓動指令碼比較簡單,就是執行flume啓動命令就可以了,不過這裏面停止指令碼需要好好說明一下了

    1. 簡單說說其它的程式碼含義
      nohub,該命令可以在你推出賬號/關閉終端之後繼續執行相應的進程。nobub就是不掛起的意思,不掛斷地執行命令。
      /dev/null代表linux的空裝置檔案,所有往這個檔案裏面寫入的內容都會丟失,俗稱「黑洞」。
      標準輸入0:從鍵盤獲得輸入/proc/self/fd/0。
      標準輸入1:輸出到螢幕(既控制檯)/proc/self/fd/1。
      錯誤輸出2:輸出到螢幕(既控制檯)/proc/self/fd/2。
    2. 這個停止指令碼有點難道,不是一下就能想到的,因爲flume 沒有提供專門的停止命令,一般我們都是使用kill -9 殺死,不過需要知道pid號,但是每次啓動都會有不同的pid號,那麼我們就需要獲取這個pid號碼,於是我們使用下面 下麪這個命令。
      ps -ef | grep file-flume-kafka | grep -v grep |awk '{print \$2}' | xargs kill
      
      那我們一步一步解析一下上面這個命令,當你執行ps -ef | grep file-flume-kafka命令的時候會查到兩個進程一個是flume的一個是本條命令的進程,那麼我們需要把這個命令過濾掉,於是在後面加上 | grep -v grep 。
      在这里插入图片描述
      但是我們看看上面命令查詢出來結果第二個參數是pid,那麼我們使用 | awk ‘{print $2}’ 查詢出pid就可以了
      在这里插入图片描述
      最後一個參數 | xargs kill 就是和kill -9 的意思一樣,如果想真正的瞭解這些命令的具體參數建議出門左拐好好研究一番。