尽管我已设置了 Wants,为什么 systemd 没有在启动时启动我的服务?

尽管我已设置了 Wants,为什么 systemd 没有在启动时启动我的服务?

我希望我的服务(取决于 PostgreSQL)在启动时启动,因此我enable使用 来完成此操作systemd,并在.service文件中我将它称为Wantspostgres 服务:

[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,但似乎只显示正在运行的服务。

答案1

Wants=并不意味着After=,因此您需要指定两者。

虽然在某些情况下确实如此,但大多数情况下只有当目标“想要”另一个单元。(因此,当 multi-user.target 具有 Wants=your.service 时,它​​将暗示 After=your.service。)但这是一个例外;一般规则是,排序不会根据依赖关系自动设置。

此外,Wants= 和 After= 都需要“完整”的单元名称 - 尽管“postgresql-12”对于 systemctl 来说已经足够,但您必须postgresql-12.service在单元文件中指定它。

相关内容