Zabbixアップデート自動化スクリプト
Zabbixのバージョンアップ作業ですが、Webのダッシュボードで更新があると表示されるので、バージョンアップがあるたびにサーバークライアントとも手動で更新していました。作業自体は簡単で数分で終わりますがクライアントの台数があると面倒くさいです
自動更新スクリプト
以下のようにZabbixをバージョンアップして、サービスを起動するスクリプトを作成しました
#!/bin/bash
# 1. パッケージのアップデート
echo "--- Updating Zabbix packages ---"
sudo dnf update -y zabbix*
# 2. 存在するZabbix関連サービスを抽出して一括再起動
# list-units で「ロードされているサービス」のみを対象にします
SERVICES=$(systemctl list-units --type=service --all --no-legend "zabbix*" | awk '{print $1}')
if [ -n "$SERVICES" ]; then
echo "--- Restarting identified services ---"
for SERVICE in $SERVICES; do
echo "Restarting $SERVICE..."
sudo systemctl restart "$SERVICE"
done
else
echo "No Zabbix services found."
fi
echo "--- Finished ---"
処理としては、以下のような流れになります
- dnf update -y zabbix* でインストールされているパッケージをアップデートする
- SERVICES=$(systemctl list-units --type=service --all --no-legend "zabbix*" | awk '{print $1}') ... zabbixに関するサービス一覧を取得
- 先ほど取得したサービスを起動する(サービスの一覧を取得しているので、サーバー・クライアントで分岐する必要がありません)
このスクリプトのメリット
1. 「作業漏れ」の完全防止
Zabbixのアップデートはパッケージを更新して終わりではなく、各プロセスの再起動がセットです。
- 手動の場合: 「サーバー側は全部再起動したけど、エージェントを忘れていた」ということが起こりがちです。
- スクリプト: アップデートと再起動を一連の流れとして定義するため、「更新したけど古いプロセスが動いたまま」という中途半端な状態を防げます。
2. 「判断」の排除によるスピードアップ
サーバーとクライアント(エージェント)が混在している環境では、ログインするたびに「このサーバーはWebサービス動いてたっけ?」と確認する必要があります。
- スクリプト: 今回の「サービスを動的に取得して再起動する」方式なら、実行者がサーバーの役割を意識しなくて済みます。 * ログイン → スクリプト実行。これだけで済むため、1台あたりの作業時間は数秒に短縮されます。
3. オペレーションミス(タイポ)の回避
手動で systemctl restart ... と打つと、スペルミスでエラーが出たり、別のサービスを止めてしまったりするリスクが常にあります。
- スクリプト: 一度検証済みのスクリプトを使えば、毎回100%同じコマンドが正確な順番で実行されます。1〜2ヶ月に1回という「慣れが消えた頃」に行う作業では、この**「確実性」**が最大の安心材料になります。

