Systemd 文档中关于 User= 的说明:
此设置不会影响命令行以“+”为前缀的命令。我无法使用“+”前缀。我添加的任何前缀都会被系统忽略,因此在下面的代码中,预启动根本不会运行。
[Service]
+ExecStartPre=/postgres.run.sh pre_start
ExecStart=/postgres.run.sh
ExecStop=/postgres.run.sh stop
+ExecStopPost=/postgres.run.sh post_stop
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=postgres
Type=forking
PIDFile=/run/pid.postgres
User=postgres
答案1
您的语法正确,但systemd
版本错误。您正在阅读当前系统版本的文档,但运行的是旧版本。该+ExecXYZ
语法是在systemd
版本 231 中引入的。
解决方法是让您的“服务”以 root 身份运行,然后让需要运行的脚本首先作为postgres
包含包装器运行到 PostgreSQL。bash
su
但是为什么要编写自己的postgresql
systemd 文件而不是使用已经写好的文件呢?