Curso de Ubuntu 26.04 / Modificar servicios con un drop-in de systemd y revertir el cambio
Para modificar un servicio, registre su configuración original y efectiva, aplique un cambio delimitado y compruebe tanto la sintaxis como el comportamiento real. Un archivo complementario o drop-in permite modificar la unidad de systemd sin editar la del paquete. Recargar unidades, pedir a la aplicación que relea su configuración y reiniciar el proceso son operaciones distintas.
Buscar la unidad original y el drop-in
Después de confirmar el nombre real del servicio, se registra la fuente como systemctl cat nombre.service y systemctl show nombre.service -p FragmentPath -p DropInPaths. Si se modifica directamente el origen del paquete /usr/lib/systemd/system, se podría sobrescribir con una actualización, por lo que los cambios locales se separan en un drop-in de /etc/systemd/system.
Crear un servicio de práctica independiente
A continuación se presenta una práctica en una VM dedicada que no afecta la aplicación del servidor. Si ubuntu-course-lab.service ya existe, se debe establecer otro nombre y ajustar toda la ruta y el comando. La opción noclobber evita sobrescribir archivos existentes y, si la creación falla, no se procede al siguiente paso.
(
set -eu
sudo sh -c 'set -C; cat > /etc/systemd/system/ubuntu-course-lab.service' <<'EOF'
[Unit]
Description=Ubuntu course configuration lab
[Service]
Type=oneshot
Environment=LAB_MODE=baseline
ExecStart=/usr/bin/printenv LAB_MODE
EOF
sudo systemd-analyze verify /etc/systemd/system/ubuntu-course-lab.service
sudo systemctl daemon-reload
sudo systemctl start ubuntu-course-lab.service
journalctl -u ubuntu-course-lab.service --since '5 minutes ago' --no-pager
)
Compruebe que la ejecución más reciente muestra baseline y termina correctamente; no la confunda con una entrada anterior. Consulte también systemctl show ubuntu-course-lab.service -p Result. Una unidad Type=oneshot sin permanencia puede quedar inactiva después de terminar con éxito. Si carece de permisos para el journal del servicio, consulte con sudo journalctl.
Cambiar valores con un solo drop-in
(
set -eu
sudo mkdir -p /etc/systemd/system/ubuntu-course-lab.service.d
sudo sh -c 'set -C; cat > /etc/systemd/system/ubuntu-course-lab.service.d/10-lab.conf' <<'EOF'
[Service]
Environment=LAB_MODE=changed
EOF
sudo systemd-analyze verify /etc/systemd/system/ubuntu-course-lab.service
sudo systemctl daemon-reload
sudo systemctl start ubuntu-course-lab.service
journalctl -u ubuntu-course-lab.service --since '5 minutes ago' --no-pager
)
El archivo original permanece intacto, pero el drop-in sustituye el valor efectivo de LAB_MODE por changed. Compare la configuración combinada y la entrada nueva del journal, atendiendo a su hora. systemd-analyze verify no demuestra por sí solo que la configuración de la aplicación, el acceso a archivos o la respuesta de sus puertos sean correctos.
Diferenciar tres comportamientos de relectura
| Comando | Rol |
|---|---|
| systemctl daemon-reload | systemd vuelve a leer la definición de la unidad y sus dependencias |
| systemctl reload servicio | Solicita a la aplicación recargar su configuración, si lo admite |
| systemctl restart servicio | Detener el proceso y luego reiniciarlo |
Por ejemplo, la configuración de la aplicación Nginx se verifica con nginx -t y se revisa la recarga admitida. Si cambió el valor del entorno de la unidad, solo con daemon-reload no se actualizará el entorno del proceso existente. Planifique el impacto de la interrupción y prueba de nuevas conexiones para decidir cómo aplicar los cambios.
El documento systemd.unit explica la ruta de búsqueda de unidades y la prioridad de las drop-ins.
Restaurar solo este cambio
(
set -eu
sudo rm -- /etc/systemd/system/ubuntu-course-lab.service.d/10-lab.conf
sudo systemctl daemon-reload
sudo systemctl start ubuntu-course-lab.service
journalctl -u ubuntu-course-lab.service --since '5 minutes ago' --no-pager
)
Tras retirar el drop-in, la nueva ejecución debe mostrar baseline. Compruebe la entrada nueva, no una línea antigua del intervalo consultado. El rm de arriba elimina únicamente el archivo de esta práctica; no use systemctl revert para borrar cambios ajenos. Si también limpia la unidad de laboratorio, confirme que la creó en esta prueba y que no se ejecuta, retire solo su archivo y vuelva a hacer daemon-reload.




