最近做某個專案,因為這個專案開發者有在 Tomcat 重啟時加了一些 alert 訊息,某一天就發現這個服務的 Tomcat 在一天內所有的機器都發生自動重啟的狀況(非同時),然後我就被告知是不是有偷偷做什麼事情了 …
然後事情發生後幾天都沒有再次自動重啟,但是身為一個有研究精神的工程師還是要追根究柢一下,免得夜長夢多留下技術債,詳細看 syslog 後發現 Tomcat 重啟的 Log 是跟著 apt security update 同一時間發生的,當下直覺是因為有 security issue 所以自動更新,然後再看一下 apt.log 果然發現在同一時段其實是在做 tomcat security update。
在確定是因為 security update 後就要在自動升級和線上可用性做選擇 …,若是當自動更新 security update 的話,當下的使用者會被中斷,這應該是要在前端被解決,但本公司沒有 … 並且對這種錯誤非常敏感 (平常程式都常在壞也沒有這麼積極),所以只能犧牲掉自動升級的功能,讓服務在適當的時間排程更新 …
在這個 case 我選擇幾個方式來解決:
- 把不想要自動 Security update 的服務過濾掉
- 塞排程在可接受的時間進行 Security update
實作方面:
- auto security update exclude service
auto security update 預設會把設定寫在 /etc/apt/apt.conf.d/50unattended-upgrades 這邊
Unattended-Upgrade::Package-Blacklist { "apache2"; "tomcat8"; "mysql-server"; "mysql-client"; };
利用黑名單禁止 Unattended 去自動升級某些服務,這點在管理資料庫其實是還蠻重要的
除了 blacklist 以外,還有許多針對 apt 其他的參數,可以參考「How to Setup Automatic Security Updates on Ubuntu 16.04」
Remove-Unused-Dependencies
Automatic-Reboot
Automatic-Reboot-Time
…
搞定。