我正在为 postgresql 数据库开发一个 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=
根据您的情况使用。