在关闭之前启动 systemd 服务

在关闭之前启动 systemd 服务

我正在为 postgresql 数据库开发一个 systemd 关闭脚本(单元文件),我按照以下两篇文章进行操作,但无法让它工作。

如何在关机前使用 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:收到智能关闭请求”,这是数据库集群在正常模式下关闭时的消息,这就是当我使用“关闭主机”时关闭操作系统所做的操作立即关闭-h”。我想看到的是“LOG:收到快速关闭请求”,这是当我使用 systemctl start service_name 运行脚本时发生的快速(立即模式)关闭

这是单元文件定义

[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

我还尝试放弃该[Install]部分,但 systemctl 不允许我在没有该[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=

相关内容