我希望我的服务(取决于 PostgreSQL)在启动时启动,因此我enable
使用 进行了配置systemd
,并在.service
文件中将其称为Wants
postgres 服务:
[Unit]
Description=My service
Wants=postgresql-12
[Service]
User=root
WorkingDirectory=/path/to/myservice
ExecStart=/path/to/myservice/my_service -d
[Install]
WantedBy=multi-user.target
myservice
启动时不会启动,因为 PostgreSQL 服务器还不存在(我可以在日志中看到)。当稍后使用 启动它时systemctl start myservice
,它启动良好,因此看起来该.service
文件是有效的。
为什么systemctl
在开始服务之前不等待 Postgres?我也尝试检查systemd-analyze blame
,但这似乎只显示正在运行的服务。
Wants=
并不意味着After=
,因此您需要指定两者。尽管在某些情况下确实如此,但大多数情况下只有当目标“想要”另一个单位时。(因此,当 multi-user.target 具有 Wants=your.service 时,它将暗示 After=your.service。)但这是一个例外;一般规则是排序不会根据依赖项自动设置。
此外,Wants= 和 After= 都需要一个“完整”的单元名称——尽管“postgresql-12”对于 systemctl 来说已经足够了,但您必须在
postgresql-12.service
单元文件中指定它。