GNU/Linux >> Tutoriales Linux >  >> Linux

Hacer que el servicio de usuario de systemd dependa del objetivo del sistema

Estaba teniendo el mismo problema, con un script de copia de seguridad de usuario que necesita acceso a Internet. Lo resolví agregando ~/.config/systemd/user/wait-for-network.service eso solo hace ping google.com hasta que sea accesible:

[Unit]
Description=Ping a server on the internet until it becomes reachable

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'while ! ping -c1 google.com; do sleep 1; done'
TimeoutStartSec=60s

Luego hice que mi secuencia de comandos de copia de seguridad dependiera de ella de esta manera:

[Unit]
Description=...
Requires=wait-for-network.service
After=wait-for-network.service

Esto funciona independientemente de si usa NetworkManager o algún otro medio para establecer la conexión.


Olvida el network.target . man systemd.special dice:

network.target
       systemd automatically adds dependencies of type After for
       this target unit to all SysV init script service units
       with an LSB header referring to the $network facility.

Por lo tanto, este objetivo es principalmente un truco de compatibilidad para los scripts de inicio de SysV.

Asumiendo que su conexión de red es manejada por NetworkManager, por supuesto, tenía razón al depender de este objetivo porque NetworkManager.service define Before=network.target . Pero esto solo significa que se ha iniciado NetworkManager, no que la conexión de red se haya establecido realmente. Eso puede llevar un tiempo (ida y vuelta de dhcp, protocolo de enlace wifi, etc.) y es asunto exclusivo de NetworkManager. Al menos en mi sistema (F18) hay un servicio llamado NetworkManager-wait-online . Utiliza el nm-online programa de utilidad para bloquear hasta que haya una conexión activa establecida. Intenta Require, Before eso en su definición de Unidad o use esa herramienta por sí sola.


Linux
  1. Cómo crear un servicio Systemd en Linux

  2. Agregar un nuevo servicio a Linux systemd

  3. ¿Cómo cambiar de usuario para un montón de archivos de servicio de Systemd?

  4. ¿Por qué la mayoría de los ejemplos de Systemd contienen Wantedby=multi-user.target?

  5. Servicio del sistema operativo Linux 'winbind'

Comandos Systemctl para administrar el servicio Systemd

Administrar cgroups con systemd

SystemD - ¿Para qué se utiliza SystemD?

Cómo convertir a un usuario en administrador en Debian 11

El sistema rechaza SSH y se atasca en 'arrancar' después de la instalación de systemd

systemd:Otorgue a un usuario sin privilegios permiso para modificar un servicio específico