magのOSS備忘録

使ったOSSソフトウェアについて書いていきます。

システム起動時のPostgreSQLの起動をネットワーク有効化まで遅延させる

概要

OSの起動時にて、ネットワークが有効化したあとにPostgreSQLを起動したい。ネットワークが有効になるまでは、PostgreSQLがlistenしようとsocketにbindしても失敗してしまうためである。 systemdを使ってシステムを起動している場合に、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

参考