GNU/Linux >> Linux Esercitazione >  >> Linux

Fai in modo che il servizio utente di systemd dipenda dalla destinazione del sistema

Stavo riscontrando lo stesso problema, con uno script di backup userland che necessita dell'accesso a Internet. L'ho risolto aggiungendo ~/.config/systemd/user/wait-for-network.service che esegue solo il ping di google.com finché non è raggiungibile:

[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

Poi ho fatto dipendere il mio script di backup in questo modo:

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

Funziona indipendentemente dal fatto che tu usi NetworkManager o qualche altro mezzo per stabilire la connessione.


Dimentica il 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.

Quindi, questo obiettivo è principalmente un hack di compatibilità per gli script SysV init.

Supponendo che la tua connessione di rete sia gestita da NetworkManager, ovviamente avevi ragione a dipendere da questo target perché NetworkManager.service definisce Before=network.target . Ma questo significa solo che NetworkManager è stato avviato, non che la connessione di rete è effettivamente stabilita. Ciò potrebbe richiedere del tempo (dhcp roundtrip, wifi handshake, ecc.) ed è interamente compito di NetworkManager. Almeno sul mio sistema (F18) c'è un servizio chiamato NetworkManager-wait-online . Usa nm-online programma di utilità da bloccare finché non viene stabilita una connessione attiva. Prova a Require, Before quello nella tua definizione di unità o usa quello strumento da solo.


Linux
  1. 10 pratici comandi di sistema:un riferimento

  2. Aggiunta di un nuovo servizio a Linux systemd

  3. Come cambiare utente per un mucchio di file di servizio Systemd?

  4. Perché la maggior parte degli esempi di Systemd contiene Wantedby=multi-user.target?

  5. Servizio del sistema operativo Linux "winbind"

Comandi Systemctl per gestire il servizio Systemd

Gestire cgroup con systemd

Come creare un servizio Systemd in Linux

SystemD - A cosa serve SystemD?

Come rendere un utente un amministratore in Debian 11

systemd:concede a un utente senza privilegi il permesso di modificare un servizio specifico