GNU/Linux >> Belajar Linux >  >> Linux

Jadikan layanan pengguna systemd tergantung pada target sistem

Saya mengalami masalah yang sama, dengan skrip cadangan userland yang memerlukan akses ke internet. Saya menyelesaikannya dengan menambahkan ~/.config/systemd/user/wait-for-network.service itu hanya ping google.com hingga dapat dijangkau:

[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

Kemudian saya membuat skrip cadangan saya bergantung padanya seperti ini:

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

Ini berfungsi terlepas dari apakah Anda menggunakan NetworkManager atau cara lain untuk menjalin koneksi.


Lupakan network.target . man systemd.special mengatakan:

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.

Jadi, target ini terutama adalah peretasan kompatibilitas untuk skrip init SysV.

Dengan asumsi bahwa koneksi jaringan Anda ditangani oleh NetworkManager, Anda tentu berhak bergantung pada target ini karena NetworkManager.service mendefinisikan Before=network.target . Tetapi ini hanya berarti bahwa NetworkManager telah dimulai, bukan berarti koneksi jaringan benar-benar dibuat. Itu mungkin memakan waktu cukup lama (dhcp roundtrip, wifi handshake, dll.) dan sepenuhnya urusan NetworkManager. Setidaknya di sistem saya (F18) ada layanan bernama NetworkManager-wait-online . Ia menggunakan nm-online program utilitas untuk memblokir sampai ada sambungan aktif dibuat. Coba Require, Before itu dalam definisi Unit Anda atau gunakan alat itu sendiri.


Linux
  1. Cara Mengubah runlevel/target menggunakan systemd di Ubuntu

  2. Bagaimana cara menjalankan skrip dengan systemd tepat sebelum dimatikan?

  3. Sistem menolak SSH dan macet saat 'boot up' setelah instalasi systemd

  1. 10 perintah systemd yang berguna:Referensi

  2. Cara membuat layanan Systemd di Linux

  3. Ketergantungan sistem dan urutan boot

  1. Menambahkan layanan baru ke sistem Linuxd

  2. Layanan OS Linux 'winbind'

  3. Bagaimana menghentikan layanan systemd