Estou procurando uma maneira de instruir o systemd a recalcular as dependências de serviço enquanto o sistema está inicializando. Especificamente, eu preciso de um serviço para habilitar outro serviço e ter o segundo serviço sendo iniciado mais tarde na mesma seqüência de inicialização. Isso faz parte do meu processo de implantação automática; muito cedo no processo de inicialização, a primeira vez que o sistema é inicializado, ele se configura automaticamente. Um dos passos que pode ser necessário é ativar outros serviços. Infelizmente, qualquer alteração feita nessa etapa parece não ter efeito até a próxima reinicialização. A reinicialização da máquina após a implantação inicial não é uma opção.
Aqui está uma ideia generalizada do que estou tentando alcançar
/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
Infelizmente, isso não funciona como eu esperava; o serviço está ativado, mas não é iniciado antes de multi-user.target
:
$ systemctl status myservice
myservice.service - MyService
Loaded: loaded (/etc/systemd/system/myservice.service; enabled)
Active: inactive (dead)
Eu posso forçá-lo a começar com systemctl isolate multi-user.target
ou reinicializando a máquina.
Eu tentei adicionar systemctl daemon-reload
e / ou systemctl daemon-reexec
a ExecStart
/ ExecStartPost
de firstboot.service
, mas nenhum deles parece ter efeito.
Existe alguma maneira que eu possa dizer ao systemd para recalcular o caminho de inicialização e incluir as mudanças que foram feitas enquanto ele ainda estava sendo inicializado? Ou precisarei fazer algo mais tarde no processo de inicialização para forçar o início do meu serviço?
Tags systemd