systemd 仅在服务 A 完成后才启动服务 B

systemd 仅在服务 A 完成后才启动服务 B

我已经搜索了一两个小时,但似乎找不到正确的解决方案。情况是这样的:

我有多项服务。我启动服务 A,它运行一个 Docker 容器。该应用程序启动,然后将文件写入isActive文件系统中的已安装目录。

我有一个服务和路径单元文件 B. watch.path 等待直到isActive存在,它运行 watch.service 并且该服务文件只是回显“isActive存在!”。

这部分逻辑工作得很好。我使用sudo journalctl -xefb并观察服务 A 启动,完成其注册,然后写入文件。然后我可以看到服务 B 单元文件开始、回显和完成。

然后我有多个其他服务文件(服务 C/D/E/F)Require以及After服务 B 观看服务。然而,服务 C/D/E/F 在服务 B 开始/结束之前就开始了。

这是我当前的“观看”服务:

# watch_for_client.path
[Unit]
Wants=A.service
After=A.service

[Path]
PathExists=/A/B/C/d.txt

[Install]
WantedBy=multi-user.target

# watch_for_client.service
[Unit]
After=A.service

[Service]
Type=oneshot
ExecStart=/bin/echo "file found"

然后在其他文件中,我有

[Unit]
Requires=wait_for_client.service
After=wait_for_client.service

[Service]
...
Type=simple
...

[Install]
WantedBy=multi-user.target

答案1

您需要更改服务 C/D/E/F 的服务单元文件配置中的三项内容:

  1. 在 [Unit] 部分:删除该行Requires=wait_for_client.service
  2. 在 [Unit] 部分中:其中的名称不正确,After=wait_for_client.service
    应该After=watch_for_client.service与服务 B 名称相匹配
  3. 在{安装]部分:应该是WantedBy=watch_for_client.service

相关内容