systemd
我有一台虚拟机,我通过和控制其启动过程cloud-init
。cloud-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
文件读取环境变量并在simple
或oneshot
类型中进行操作。
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-4
并service-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-4
并service-5
依赖该服务:
[Unit]
Requires=service-handle-notification.service
After=service-handle-notification.service
使用此配置,service-4
直到service-5
后 service-handle-notification
完成。