我正在寻找一种方法来指示 systemd 在系统启动时重新计算服务依赖项。具体来说,我需要一项服务能够启用另一项服务,并让第二项服务稍后以相同的启动顺序启动。这是我的自动部署过程的一部分;在引导过程的早期,系统第一次启动时,它会自动配置自身。它可能需要采取的步骤之一是启用其他服务。不幸的是,它在该步骤中所做的任何更改似乎只有在下次重新启动后才会生效。初始部署后重新启动计算机不是一种选择。
这是我想要实现的目标的一般想法
/etc/systemd/system/firstboot.service:
[Unit]
Description=Enable MyService
DefaultDependencies=no
After=sysinit.target
Before=basic.target
[Service]
Type=oneshot
ExecStart=/bin/systemctl enable myservice.service
ExecStartPost=/bin/systemctl disable firstboot.service
[Install]
RequiredBy=basic.target
/etc/systemd/system/myservice.service:
[Unit]
Description=MyService
[Service]
Type=simple
ExecStart=/usr/local/bin/myservice
[Install]
WantedBy=multi-user.target
不幸的是,这并没有像我预期的那样工作;该服务已启用,但之前未启动multi-user.target
:
$ systemctl status myservice
myservice.service - MyService
Loaded: loaded (/etc/systemd/system/myservice.service; enabled)
Active: inactive (dead)
systemctl isolate multi-user.target
我可以通过重新启动机器来强制它启动。
我尝试过添加systemctl daemon-reload
and/orsystemctl daemon-reexec
到ExecStart
/ ExecStartPost
of firstboot.service
,但似乎都没有任何效果。
有什么方法可以告诉 systemd 重新计算启动路径并包含在启动时所做的更改吗?或者我需要在启动过程中稍后执行某些操作来强制启动我的服务?