SDB:Systemd files
Art铆culos recomendados | Art铆culos relacionados | ||
Editar unidades
La forma recomendada de personalizar archivos de unidades es utilizar el comando
systemctl edit SERVICE
Este comando inicia el editor de texto predeterminado y crea un directorio con el archivo override.conf en /etc/systemd/system/SERVICE.service.d/. El comando tambi茅n garantiza que el proceso systemd en ejecuci贸n sea notificado sobre los cambios. El editor mostrar谩 el contenido del fichero comentado con # y unas l铆neas adicionales al principio. Las modificaciones ir谩n en el hueco entre estas l铆nas
### Editing /etc/systemd/system/NetworkManager.service.d/override.conf
### Anything between here and the comment below will become the contents of the drop-in file
<las modificaciones van aqu铆>
### Edits below this comment will be discarded
### /usr/lib/systemd/system/NetworkManager.service
# [Unit]
# Description=Network Manager
# ...
De forma alternativa, puedes abrir una copia del archivo original para editarlo en lugar de un archivo en blanco ejecutando
systemctl edit --full SERVICE
Al editar el archivo, aseg煤rate de no eliminar ninguna de las secciones existentes.
Como ejercicio, prueba a cambiar cu谩nto tiempo espera el sistema para que se inicie MariaDB. Como root, ejecuta
systemctl edit --full mariadb.service
El archivo abierto ser谩 similar al siguiente:
[Unit]
Description=MySQL server
Wants=basic.target
Conflicts=mariadb.target
After=basic.target network.target
[Install]
WantedBy=multi-user.target
Alias=mysql.service
[Service]
Restart=on-abort
Type=notify
ExecStartPre=/usr/lib/mysql/mysql-systemd-helper install
ExecStartPre=/usr/lib/mysql/mysql-systemd-helper upgrade
ExecStart=/usr/lib/mysql/mysql-systemd-helper start
# Configures the time to wait for start-up/stop
TimeoutSec=300
# Prevent writes to /usr, /boot, and /etc
ProtectSystem=full
# Prevent accessing /home, /root and /run/user
ProtectHome=true
UMask=007
Ajusta el valor de TimeoutSec y guarda los cambios. Para habilitar estos cambios, como root, ejecuta
systemctl daemon-reload.
Para obtener m谩s informaci贸n, consulta las p谩ginas de manual que se pueden invocar con el comando
man 1 systemctl.
Estructura b谩sica de una unidad
Los ficheros que definen las unidades para systemd contienen diferentes bloques etiquetados con corchetes []:
- [Unit]: define la propia unidad, sus dependencias y descripci贸n. Tambi茅n indica donde puede encontrarse la documentaci贸n asociada a esa unidad.
- [Install]: se tiene en cuenta esta configuraci贸n al activar y desactivar (enable/disable) la unidad.
- [Service]: establece la configuraci贸n de la mayor铆a de servicios (.service)
- [Timer]: establece la configuraci贸n de los temporizadores (.timer)
Ejemplo de unidad
Tomemos de ejemplo un ejecutable llamado vampir.sh que se encarga de una tarea X, en la que se necesita acceso a la red. Para que systemd lo inicie somo un servicio del sistema es necesario crear un archivo de unidad de tipo servicio con la extensi贸n .service.
sudo systemctl edit --force --full vampird.service
El comando de edici贸n del servicio incluye el modificador --force para forzar la creaci贸n de un nuevo servicio.
[Unit]
Description = Descripci贸n del demonio vampird
Requires = network.target
After = network.target
[Service]
Type = notify
PIDFile = /var/run/vampirsh.pid
ExecStart = /ruta/al/ejecutable/vampir.sh
Restart = on-abort
Para arrancar el servicio, necesitas el comando
sudo systemctl start vampird.service
Si quieres que el servicio se active de forma autom谩tica ejecuta en su lugar
sudo systemctl enable --now vampird.service
Al activar/desactivar o bien al ejecutar/parar/reiniciar una unidad de tipo servicio puede obviarse la extensi贸n .service:
sudo systemctl enable --now vampird
Cuando se modifique la configuraci贸n de la unidad, ejecuta
sudo systemctl daemon-reload
Dependencias
Las dependencias en systemd son controladas con las variables After, Requires y Wants. En el caso de la unidad anterior el demonio requiere el target network, esto es especificado en la secci贸n [Unit] con la linea Requires = network.target, si no fuera un requerimiento escencial podria usarse Wants en vez de Requires. Wants= y Requires= no incluyen After=, lo que significa que si After= no est谩 especificado, las dos unidades se iniciar谩n en paralelo.