Tengo muchos archivos de unidades de servicio que debo reiniciar y no quiero tener que escribirlos todos. ¿Es posible tener un único objetivo o servicio que no sepa nada sobre cómo iniciar los otros servicios, pero los agrupe para que todos se reinicien con un solo comando?
¿Cómo escribo mi archivo de unidad de servicio systemd o mi archivo de destino si así lo deseo systemctl restart one-to-rule-them-all
?
Requisitos: 1. El objetivo súper quiere que se inicien muchos otros servicios. 2. El súper objetivo no debería saber nada sobre cómo iniciar esos servicios.
Cuando probé esto sudo systemctl restart one-to-rule.target
no pasa nada.
# /etc/systemd/system/one-to-rule.target
[Unit]
Description=One To Rule Them All
Requires=multi-user.target
Wants=program-api.service program-gui.service yet-another.service
After=multi-user.target display-manager.service
[Install]
WantedBy=graphical.target
Cada una de estas unidades program-api.service
program-gui.service
yet-another.service
estaba one-to-rule.target
habilitada y todas parecen estar cargadas y activas. Puedo iniciar la máquina y todos los servicios aparecen exactamente como los quiero. Sin embargo, solo quiero escribir systemctl restart one-to-rule.target
o algo así, en lugar de reiniciar.
Los gráficos de dependencia se ven así
$ systemctl list-dependencies one-to-rule.target
one-to-rule.target
● ├─program-api.service
● ├─program-gui.service
● ├─yet-another.service
● └─multi-user.target
$ systemctl list-dependencies --reverse one-to-rule.target
one-to-rule.target
● └─graphical.target
Respuesta1
Esto puede funcionar, pero cada una de esas unidades .service debe tenerlo PartOf=one-to-rule.target
para que se les propaguen reinicios. (En realidad, esta es solo una versión más débil de Requires=<…>.target
.)
Lamentablemente, no es posible especificar la dependencia opuesta (ConsistsOf) directamente en el destino; es necesario ampliar todos los archivos de servicio.