Zabbix6でPostgreSQL15を使用したらOSがシャットダウンしてくれない

![RockyLinux-9.1](https://img.shields.io/badge/RockyLinux-9.1-lightgray?style=for-the-badge&logo=rockylinux)![Zabbix-6.0.13](https://img.shields.io/badge/Zabbix-6.0.13-lightgray?style=for-the-badge&logo=zabbix)![PostgreSQL-15.2](https://img.shields.io/badge/PostgreSQL-15.2-lightgray?style=for-the-badge&logo=postgresql)![ApacheHttpd-2.4.53](https://img.shields.io/badge/Apache-2.4.53-lightgray?style=for-the-badge&logo=apache)

## 発生した問題
ZabbixをインストールしたRockyLinuxサーバが、なぜかシャットダウンが完了しなくなりました。`reboot`や`poweroff`を実行すると、輪っかのアイコンがぐるぐるしている画面から進まないのです...

![悲しみの画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/97774/8bc2a236-e778-b39a-c99a-f0249aecf4f4.jpeg)
なんでー！？


## 試したこと・確認したこと
* カーネルアップデート
    * 特に変化なし。
* ミドルウェアのバージョン確認
    * https://www.zabbix.com/documentation/6.0/jp/manual/installation/requirements を参照 不備は見当たらない。
* 追加したサービスを一つ一つ停止しながらシャットダウンテスト
    * `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アップデートでそのうち対応されると思いますが、未対応の場合は手動で対応を。