終了する前に systemd サービスを開始してください。

終了する前に systemd サービスを開始してください。

私はpostgresqlデータベース用のシステムシャットダウンスクリプト(ユニットファイル)を開発しています。次の2つの記事に従いましたが、うまくいきませんでした。

シャットダウンする前にsystemdを使用してスクリプトを実行する方法は?

https://superuser.com/questions/1016827/how-do-i-run-a-script-before-everything-else-on-shutdown-with-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=状況に応じてご活用いただければと思います。

公式文書を参照してください拡張基本構成と公式文書ExecStop=そしてExecStopPost=

おすすめ記事