発生した問題
ZabbixをインストールしたRockyLinuxサーバが、なぜかシャットダウンが完了しなくなりました。reboot
やpoweroff
を実行すると、輪っかのアイコンがぐるぐるしている画面から進まないのです...
試したこと・確認したこと
- カーネルアップデート
- 特に変化なし。
- ミドルウェアのバージョン確認
- 追加したサービスを一つ一つ停止しながらシャットダウンテスト
-
zabbix-server.service
を止めていれば問題が再発しないことに気づく。
-
- OS及びZabbixバージョンが同一で、本事象が発生していない環境と見比べる。
- 問題ない環境はDBとしてMariaDBを使っている。
このことから、zabbix-serverのサービスと、データベースの種類の組み合わせにより起きていると判断。
解決方法
zabbix-server.service
のUnitファイルを見たところ、以下の記載でした。
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target
After=mysql.service
After=mysqld.service
After=mariadb.service
After=postgresql.service
After=pgbouncer.service
After=postgresql-9.4.service
After=postgresql-9.5.service
After=postgresql-9.6.service
After=postgresql-10.service
After=postgresql-11.service
After=postgresql-12.service
After=postgresql-13.service
After=postgresql-14.service
[Service]
Environment="CONFFILE=/etc/zabbix/zabbix_server.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-server
Type=forking
Restart=on-failure
PIDFile=/run/zabbix/zabbix_server.pid
KillMode=control-group
ExecStart=/usr/sbin/zabbix_server -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
TimeoutSec=0
[Install]
WantedBy=multi-user.target
[Unit]
セクションの配下にあるAfter=サービス名
が、zabbix-server.service
より先に起動/停止すべきサービスを定義しています。※Zabbixは、zabbix-server.service
より先にDBが停止してしまうと永遠に待機状態に陥ります。
あれ?DBとして使用しているのはPostgreSQL15なのに、After=postgresql-15.service
がないじゃん...
ということで以下の様に修正してリロードしました。
# cp -p /etc/systemd/system/multi-user.target.wants/zabbix-server.service ~/
# vim /etc/systemd/system/multi-user.target.wants/zabbix-server.service
--------------------------------------------zabbix-server.service
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target
After=mysql.service
After=mysqld.service
After=mariadb.service
After=postgresql.service
After=pgbouncer.service
After=postgresql-9.4.service
After=postgresql-9.5.service
After=postgresql-9.6.service
After=postgresql-10.service
After=postgresql-11.service
After=postgresql-12.service
After=postgresql-13.service
After=postgresql-14.service
After=postgresql-15.service ← 追記
[Service]
Environment="CONFFILE=/etc/zabbix/zabbix_server.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-server
Type=forking
Restart=on-failure
PIDFile=/run/zabbix/zabbix_server.pid
KillMode=control-group
ExecStart=/usr/sbin/zabbix_server -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
TimeoutSec=0
[Install]
WantedBy=multi-user.target
--------------------------------------------
# systemctl daemon-reload
# systemctl restart zabbix-server
あっさり問題解決。よかったー!
はじめはめちゃくちゃRockyLinuxを疑ってしまいました。ごめんなさい。
多分Zabbixアップデートでそのうち対応されると思いますが、未対応の場合は手動で対応を。