systemd 等待外部环境变量来触发服务启动

systemd 等待外部环境变量来触发服务启动

systemd我有一台虚拟机,我通过和控制其启动过程cloud-initcloud-init我有一个执行初始化的脚本,如下所示:

runcmd:
- /etc/systemd/system/init.sh

/etc/systemd/system/init.sh内容:

  systemctl start service-1
  systemctl start service-2
  systemctl start service-3
  systemctl start service-4
  systemctl start service-5

VM 以两种模式运行:

a) 顺序:所有服务使用:EnvironmentFile=/tmp/ENV文件读取环境变量并在simpleoneshot类型中进行操作。

b)等待模式:

服务 1 至 3 已启动,但 4-5 需要等待外部信号才能启动。此信号将更新/tmp/ENV 服务 4 中的 ENV 变量,而服务 5 必须等待,因为它们需要此 ENV 变量值。我可以轻松引入接收通知的新服务,然后继续执行序列。

systemctl start service-1
systemctl start service-2
systemctl start service-3
systemctl start service-handle-notification
systemctl start service-4
systemctl start service-5

但希望看看是否有推荐的模式来制作service-4service-5处于待机状态,然后在收到通知后启动。阅读有关Type=notify但这只是阻止服务并且控制不会执行下一个服务。

问题:

systemctl start service-handle-notification我可以设置模式“分叉”或任何模式在后台运行。

我如何让机器人服务 4-5 等待从service-handle-notification

systemd 是否有更好的模式(例如:之前/之后)

答案1

首先,不要像这样启动多个服务:

systemctl start service-1
systemctl start service-2
systemctl start service-3
systemctl start service-4
systemctl start service-5
systemctl start service-handle-notification

像这样启动它们:

systemctl start \
  service-1 \
  service-2 \
  service-3 \
  service-4 \
  service-5 \
  service-handle-notification

如果您对服务进行了前/后排序,则只有当它们同时启动时才有意义。

完成上述更改后,即可提供service-handle-notification.service服务Type=oneshot

[Service]
Type=oneshot
ExecStart=...

然后制作service-4service-5依赖该服务:

[Unit]
Requires=service-handle-notification.service
After=service-handle-notification.service

使用此配置,service-4直到service-5 service-handle-notification完成。

相关内容