選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
5 分鐘閱讀時間 (1004 個字)

Ansible #12 - Ad-Hoc 指令[5]

shutterstock_198004562
  • 前一篇針對使用者、檔案…等提到如果透過 module 簡單維護多台電腦的這些資訊,而今天的重點如下:
    • 背景程式的建立與監控
    • Fire and forget 的任務
    • 檢查日誌
    • 管理排程
  • 首先是背景程式的建立與監控
    • 這個的目的主要是什麼?
      • 有時候某些任務要跑很久,你不可能永遠讓 terminal 永遠是 hanging 的狀態,舉例: apt-get update 或是 yum update
      • 如果你很久沒更新了,那這個流程可能會花到一個上午也說不定,看你的機器設備及網路通順的程度與速度
    • Ansible 解決了什麼問題?
      • 預設來說 Ansible 本來就會以 Asynchronous 的方式執行任務,這在前面的章節有提過,看你 fork 要設多少
      • 如果只有一兩台要管,這當然是沒什麼差,但如果有上百上千台,最好是透過 Ansible 會比較方便
        • 而這個是適用於所有的 module 的
        • 只要今天你想以背景的方式執行這些更新,你可以加上 -B 或是 -P
        • 承上,前者代表的是 background,而後者是以為單位讓 Ansible 去問「任務執行完了沒」的時間
        • 比方說我們以其中一台來更新 yum update,看看會是什麼樣的結果
            ansible db -b -m yum -B 30 -P 10 -a "name=* state=latest" -i hosts -u vagrant -vvvv
          • 如上圖,可以看到背景程式開始執行後會回傳一組 jid,可以再透過以下語法查詢該任務目前執行的狀況
              ansible db -b -m async_status -a "jid=${jid}" -i hosts -u vagrant
          • 另外一個可以看到目前背景程式執行狀態的就是透過那個檔案路徑,以上圖為例就是:
              /root/.ansible_async/504573580540.9689"
            • Fire and forget 的任務,其實就是背景任務的一種
            • 只不過它的 -P 是 ,預設值是 10
            • 此外,它的缺點就是無法async_status 這個模組來查詢目前任務的狀態
            • 不過,仍然可以用查詢檔案內容的方式知道任務的狀態
  • 檢查日誌
    • 一般來說我們都會用 tail/grep/head/cat ... 等方式取得 log 的內容,不過在透過 Ansible 處理的時候有幾點要注意
      • 當你要使用監控性質的指令如 tail -f,它會壞給你看
        • 這是因為 Ansible 會等指令執行完才一次回傳結果,所以像是 tail -f 這種指令,就會因為 Ansible 收不到 Ctrl-c 中斷而失常
      • 當你有巨量的日誌要看,最好還是直接 ssh 進去
      • 如果要做 stdout stderr 的重新導向,module 不要選 shell,要選 command,否則不會正常運作
  • 管理排程
    • 排程是很多 IT 會用來處理某些事,像是備份、清 cache、背景跑報表之類的一種重複性事務
    • Ansible 針對這塊也是有 module 在處理,讓你不用再背那些 cron 語法,或是維護很長的 crontab ...
      • 首先,Ansible 用的是 cron 這個 module,如下例:
          ansible multi -b -m cron -a "name='daily-cron-all-servers' hour=4 job='/path/to/daily-script.sh'"
        • 第一,你必須要有 root 權限所以要加 -b
        • 第二,它可以為排程取名!!!
        • 第三,它用英文寫,比方說 hour = 4 就是指每天早上四點執行這個 shell。其他像是 day, minute, month, weekday, ... 等
        • 如果想移除排程,只要把 state 改成 absent 就可以了
  • 以上就是今天小知識的部份
    • 目前為止講的都是針對 Linux 系統的維護,是因為幾個原因
      • 我看的書只有講 Linux(X),畢竟普遍大家的認知是 Linux 相對穩定與不耗資源,因為 windows 是為了讓一般大眾也能使用的…
      • 一開始 Ansible 是不太支援 windows 的,但…如同在安裝篇提的,後來其實是可以支援的
    • 綜上所述,下一篇會提到一些在 windows 對應的 module
      • 忘記條件的朋友們去看一下安裝篇喔
      • 記得先備一台可以裝 Openssh Server 或是開啟 winrm 的 windows VM 才能跟得上範例嘿
【Data Modeling】發動Pattern組合技
台電令人向上

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2024/05/02, 週四

Captcha 圖像