
私はpostgresqlデータベース用のシステムシャットダウンスクリプト(ユニットファイル)を開発しています。次の2つの記事に従いましたが、うまくいきませんでした。
シャットダウンする前にsystemdを使用してスクリプトを実行する方法は?
Postgresqlのインストール時に実行した作業は次のとおりです。起動時にpostgresqlデータベースクラスタを起動する起動スクリプトを作成しましたが、以下に示す終了スクリプトは終了時に機能しないようです。 systemctl start service_name で実行すると正常に動作します。
データベースログを表示すると、「LOG:Smart shutdown request received」というメッセージが表示されます。これは、データベースクラスタが通常モードでシャットダウンしたときに発生し、「ホストシャットダウン」を使用してOSをシャットダウンしたときに発生する現象です。即時終了 -h". 私が見たいのは、systemctl start service_nameを使用してスクリプトを実行したときに発生するクイック(即時モード)終了である"LOG:Fast shutdown request received"です。
これはユニットファイル定義です
[Unit]
Description=Database Shutdown
Before=shutdown.target reboot.target halt.target
DefaultDependencies=no
[Service]
ExecStart=/usr/bin/su - postgres -c "/opt/postgres-95/bin/pg_ctl -D /database/inst1/data -w stop &"
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=shutdown.target
また、そのセクションを削除しようとしましたが、systemctlにそのセクションがないとサービスを有効にする[Install]
ことはできません。[Install]
誰かが私に正しい方向を教えてもらえますか?
答え1
systemd
これらの状況をきれいに処理するように設計されています。 PostgreSQLサービスが停止したときに実行するコマンドを指定する小さなファイルを作成します。まず、次のようなディレクトリを作成します。
/etc/systemd/system/postgresql.d/
.conf
たとえば、次custom-shutdown.conf
のようにファイルに数行を追加します。
[Service]
ExecStop=/usr/bin/su - postgres -c "/opt/postgres-95/bin/pg_ctl -D /database/inst1/data -w stop &"
ExecStopPost=
状況に応じてご活用いただければと思います。