Systemd postgresql起動スクリプト


14

私はpostgresqlを2番目のサーバーにインストール中です

以前にpostgresqlをインストールしてから、提供されたスクリプトを使用しました

./contrib/start-scripts/linux

正しいディレクトリに配置

# cp ./contrib/start-scripts/linux /etc/rc.d/init.d/postgresql92
# chmod 755 /etc/rc.d/init.d/postgresql92

その後、期待どおりに実行できました

# service postgresql92 start

しかし、新しいマシンはSystemdを使用しており、これを行うにはまったく異なる方法があるようです

私はこれをハックして何かを台無しにしたくないので、誰かが同じ結果を達成する方法の正しい方向に私を向けることができるかどうか疑問に思っていました

回答:


21

ソースからインストールする場合、ソースのインストールで動作するsystemdユニットファイルを追加する必要があります。RHELの場合、Fedoraのユニットファイルは次のようになります。

/usr/lib/systemd/system/postgresql.service

[Unit]
Description=PostgreSQL database server
After=network.target

[Service]
Type=forking

User=postgres
Group=postgres

# Where to send early-startup messages from the server (before the logging
# options of postgresql.conf take effect)
# This is normally controlled by the global default set by systemd
# StandardOutput=syslog

# Disable OOM kill on the postmaster
OOMScoreAdjust=-1000
# ... but allow it still to be effective for child processes
# (note that these settings are ignored by Postgres releases before 9.5)
Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
Environment=PG_OOM_ADJUST_VALUE=0

# Maximum number of seconds pg_ctl will wait for postgres to start.  Note that
# PGSTARTTIMEOUT should be less than TimeoutSec value.
Environment=PGSTARTTIMEOUT=270

Environment=PGDATA=/usr/local/pgsql/data


ExecStart=/usr/local/pgsql/bin/pg_ctl start -D ${PGDATA} -s -w -t ${PGSTARTTIMEOUT}
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D ${PGDATA} -s

# Give a reasonable amount of time for the server to start up/shut down.
# Ideally, the timeout for starting PostgreSQL server should be handled more
# nicely by pg_ctl in ExecStart, so keep its timeout smaller than this value.
TimeoutSec=300

[Install]
WantedBy=multi-user.target

次に、起動時にサービスを有効にして、PostgreSQLサービスを開始します。

$ sudo systemctl daemon-reload # load the updated service file from disk
$ sudo systemctl enable postgresql
$ sudo systemctl start postgresql

6
# systemctl start postgresql.service

一部の環境はに変換さservice <name> startsystemctl start <name>.serviceますが、それに依存する必要はありません。


しかし、postgresql92スクリプトはどこに配置しますか?
TheLovelySausage

systemdではもう使用しません。サービスを開始できるように、ディストリビューションからpostgresql systemdサービスファイルを提供する必要があります。
-Emeric

特定のディレクトリに3つのバージョンのpostgresをインストールする必要があるため、postgresqlはソースからインストールされましたが、dnfを使用していませんが、提供されたstart-scripts linuxファイルを使用してpostgresqlを起動できますか?
TheLovelySausage

私のディストリビューションでは、このスクリプトをとして追加しています/usr/lib/systemd/system/postgresql.service。postgresqlが提供する開始スクリプトはのみをカバーしているようですSysV
-Emeric

dnfまたはyumを使用してpostgresをインストールしましたか?
TheLovelySausage

0

上記の投稿されたsystemctlユニットファイルは私を大いに助けますが、必要なものを作成するにはあなたはそれを置くだけです:

/etc/systemd/system/postgresql92.service
systemctl enable postgresql92.service
systemctl start postgresql92.service

インストールに応じてbinay pg_ctlパスを変更することを検討してください。別のインスタンスを実行する場合は、デフォルトのリスニングポートも変更する必要があります。

ExecStart=/usr/local/pgsql/bin/pg_ctl -o "-p 5489"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.