ソースからインストールしたPostgreSQLをsystemctlで自動起動する方法【AlmaLinux 9】

目次

はじめに

AlmaLinux9にPostgreSQLをパッケージではなくソースからインストールすると、systemctlコマンドが使えないので手動で起動する必要があります。

例えば、サーバのOSをリブートした後、PostgreSQLを自動起動させる方法の一つとして、個別にスクリプトを作成するやり方がありますが、これもまた作るのが少し面倒です。

そのため、今回はsystemd用のユニットファイルを作成し、systemctlでサービスを管理および自動起動させる手順についてみていきたいと思います。

大まかな作業の流れ

STEP
systemd用のユニットファイルを作成

自分の環境(Path)を確認しながら作成します。

# vi /etc/systemd/system/postgresql.service

STEP
systemdにPostgreSQLをサービスとして登録

# systemctl daemon-reload

STEP
サーバ起動時に自動的にPostgreSQLが起動するように設定

# systemctl enable postgresql

PostgreSQLのインストール場所を確認

まず、ソースからインストールしたPostgreSQLのインストールディレクトリとデータディレクトリを確認しておきます。

以下の例では、PostgreSQLが/usr/local/pgsqlにインストールされ、データディレクトリが/usr/local/pgsql/pgdataにあると仮定しています。

インストールディレクトリ: /usr/local/pgsql
データディレクトリ: /usr/local/pgsql/pgdata

systemdユニットファイルを作成

次に、systemd用のユニットファイルを作成します。

このユニットファイルを使うことで、PostgreSQLsystemctlで管理できるようになります。

ターミナルで以下のコマンドを実行し、ユニットファイルを作成します。

# 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を操作できるようにする手順についてみてきました。

ご参考になれば幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

今は社内SEとして、幅広くお仕事をしています。以前に比べて開発系のお仕事は少なくなりましたが、プログラムやDB、AlmaLinuxなどのサーバ構築、Cisco、YAMAHAルータ等、個人的に時間を見つけてちょこちょことがんばっています。また、米国株や暗号資産、DeFiなども色々試しているので、備忘録的になりそうですが、少しずつ載せていければなと思っています。

コメント

コメントする

CAPTCHA


目次