SDB:Systemd files

Saltar a: navegaci贸n, buscar


Art铆culos recomendados Art铆culos relacionados
Icon-manual.png Icon-ayuda.png

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.