はじめに
AlmaLinux9にPostgreSQLをパッケージではなくソースからインストールすると、systemctlコマンドが使えないので手動で起動する必要があります。
例えば、サーバのOSをリブートした後、PostgreSQLを自動起動させる方法の一つとして、個別にスクリプトを作成するやり方がありますが、これもまた作るのが少し面倒です。
そのため、今回はsystemd用のユニットファイルを作成し、systemctlでサービスを管理および自動起動させる手順についてみていきたいと思います。
大まかな作業の流れ
自分の環境(Path)を確認しながら作成します。
# vi /etc/systemd/system/postgresql.service
# systemctl daemon-reload
# systemctl enable postgresql
PostgreSQLのインストール場所を確認
まず、ソースからインストールしたPostgreSQLのインストールディレクトリとデータディレクトリを確認しておきます。
以下の例では、PostgreSQLが/usr/local/pgsqlにインストールされ、データディレクトリが/usr/local/pgsql/pgdataにあると仮定しています。
インストールディレクトリ: /usr/local/pgsql
データディレクトリ: /usr/local/pgsql/pgdata
systemdユニットファイルを作成
次に、systemd用のユニットファイルを作成します。
このユニットファイルを使うことで、PostgreSQLをsystemctlで管理できるようになります。
ターミナルで以下のコマンドを実行し、ユニットファイルを作成します。
# vi /etc/systemd/system/postgresql.service
次に、以下の内容をファイルに貼り付けます。
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
# PostgreSQLのインストールディレクトリとデータディレクトリを設定
ExecStart=/usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/pgdata -s -l /usr/local/pgsql/logfile
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D /usr/local/pgsql/pgdata -s
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D /usr/local/pgsql/pgdata -s
PIDFile=/usr/local/pgsql/pgdata/postmaster.pid
# サービスが再起動するポリシー
Restart=on-failure
[Install]
WantedBy=multi-user.target
このスクリプトは、PostgreSQLの起動や停止、再起動を管理するためのものです。
ExecStartやExecStopのパスは、インストールディレクトリとデータディレクトリに合わせて変更してください。
systemdの設定をリロード
ユニットファイルを作成した後、systemdに認識させるために設定をリロードします。
# systemctl daemon-reload
PostgreSQLサービスの起動と自動起動設定
次に、PostgreSQLサービスを起動し、サーバの起動時に自動で開始されるように設定します。
PostgreSQLを手動で起動するには、次のコマンドを実行します。
# systemctl start postgresql
自動起動を有効にするには、以下のコマンドを実行します。
# systemctl enable postgresql
実際にコマンドを投入すると、こんな感じです。
# systemctl enable postgresql
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /etc/systemd/system/postgresql.service.
#
symlinkが作成されていますね。
PostgreSQLサービスのステータスを確認
PostgreSQLが正しく起動しているかを確認するには、以下のコマンドを使用します。
# systemctl status postgresql
このコマンドで、サービスがactive (running)と表示されていれば、PostgreSQLが正常に動作していることを確認できます。
実際にコマンドを投入すると、以下のように表示されます。
# systemctl status postgresql
● postgresql.service - PostgreSQL database server
Loaded: loaded (/etc/systemd/system/postgresql.service; enabled; preset: disabled)
Active: active (running) since Sun 2024-09-08 18:26:44 JST; 1min 4s ago
※以下、省略。
まとめ
これで、ソースからインストールしたPostgreSQLもsystemctlで管理できるようになり、サーバを再起動しても自動でPostgreSQLが起動するようになりました。
パッケージからインストールした方が運用上、楽ではあるのですが、色々試したいときはソース(tarball)から入れたくなる人もいるかと思います。
今回は、ソースからインストールした際のsystemctlコマンドからPostgreSQLを操作できるようにする手順についてみてきました。
ご参考になれば幸いです。
コメント