在启动期间更改 systemd 依赖项

在启动期间更改 systemd 依赖项

我正在寻找一种方法来指示 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-reloadand/orsystemctl daemon-reexecExecStart/ ExecStartPostof firstboot.service,但似乎都没有任何效果。

有什么方法可以告诉 systemd 重新计算启动路径并包含在启动时所做的更改吗?或者我需要在启动过程中稍后执行某些操作来强制启动我的服务?

相关内容