概要
OSの起動時にて、ネットワークが有効化したあとにPostgreSQLを起動したい。ネットワークが有効になるまでは、PostgreSQLがlistenしようとsocketにbindしても失敗してしまうためである。 systemdを使ってシステムを起動している場合に、PostgreSQLの起動をネットワークが有効になるまで遅延させる方法を記載する。
目次
実行環境・前提条件
- CentOS Stream 8
- NetworkManagerを使っている
- PostgreSQL 12.7
- CentOSのバンドル版ではなく、PostgreSQL公式のリポジトリから取得したパッケージを使う
NetworkManager-wait-online.serviceの有効化
NetworkManagerを使っている場合にネットワークが有効化するまで待つサービスを使用する。 このサービスが有効になっているかは、以下のコマンドで確認する。
# systemctl is-enabled NetworkManager-wait-online.service enabled
無効の場合は、以下で有効化する。
# systemctl enable NetworkManager-wait-online.service
参考リンクによるとnetwork-online.targetと共にNetworkManager-wait-online.serviceを有効化する必要があるとのこと。NetworkManager-wait-online.serviceは他との関連で有効になる可能性があるため、わざわざ指定しないでもよいと考えることできるそうだ。 わかりやすさを優先して、明示的に有効化するような手順とした。
PostgreSQLのユニットファイル編集
PostgreSQLのインストール手順は省略する。 ユニットファイルを変更するため、/etc/systemd/systemにコピーする。
systemdでは、/usr/lib/systemd/systemのユニットファイルよりも、/etc/systemd/systemのユニットファイルが優先されるようになっている(この辺りはsystemdのマニュアルに記載がある)。 また、パッケージマネージャによって/usr/lib/systemd/system/のファイルは書き換えられる可能性があるため、コピーして使用するように推奨されている。(PostgreSQLのユニットファイルのコメントより)
# cp -a /usr/lib/systemd/system/postgresql-12.service /etc/systemd/system/postgresql-12.service
PostgreSQLのユニットファイルは以下の通り、修正する。 network-online.targetのあとに起動するように指定する。
@@ -14,7 +14,7 @@ Description=PostgreSQL 12 database server Documentation=https://www.postgresql.org/docs/12/static/ After=syslog.target -After=network.target +After=network.target network-online.target [Service] Type=notify