Ketergantungan systemd dan urutan boot


20

Saya perlu menentukan urutan boot untuk memulai proses. Saya memiliki 389 Server Direktori dan Samba yang berjalan di Fedora 18. Bagaimana saya bisa menjalankan layanan jaringan, kemudian 389 DS, lalu Samba? Apakah ada GUI untuk mengelola ini di Fedora?

Saya telah mengaktifkan Samba untuk memulai systemctl enable smb.service. Saya juga telah mengaktifkan 389 DS dengan systemctl enable dirsrv.target.


Systemd tidak memerlukan pesanan di antara layanan, idenya adalah untuk memulai semuanya secara paralel dan menyerahkan koneksinya ke server saat tersedia. Konfigurasi yang diberikan oleh instalasi default harus baik-baik saja. Menurut Anda mengapa Anda harus menentukan pesanan? Apakah ada yang gagal berfungsi?
vonbrand

Saya juga harus mencatat, karena ini telah muncul kembali, bahwa Anda benar-benar tidak boleh menjalankan layanan file / cetak pada pengontrol domain Anda.
Michael Hampton

@vonbrand Saya punya masalah ini, di mana server DHCP saya perlu slapd untuk diaktifkan (karena konfigurasinya disimpan dalam direktori LDAP). Jika tidak, server DHCP tidak akan muncul.
mat

Jawaban:


25

Gunakan systemctl edit smb.serviceuntuk memperbarui dependensi.

After=dirsrv.target - Akan memastikan layanan smb.server dimulai setelah dirsrv.target.

Untuk ketahanan, (yang akan bernilai saat Anda mengutak-atik hal ini) Anda mungkin juga ingin menyertakan beberapa hal berikut:

Requires=dirsrv.target- Aktifkan dirsrv.target ketika smb.service diaktifkan. Akan menyebabkan smb.service gagal jika dirsrv.target gagal.

Wants=dirsrv.target- Aktifkan dirsrv.target ketika smb.service diaktifkan. Tidak akan menyebabkan layanan seseorang gagal jika dirsrv.target gagal.

BindsTo=dirsrv.target - Jika dirsrv.target dinonaktifkan, nonaktifkan layanan smb.

Sumber: http://www.freedesktop.org/software/systemd/man/systemd.unit.html

systemd-uimenyediakan GUI untuk systemd. Memberikan pandangan yang baik tentang status systemd tetapi Anda masih harus menggunakan editor teks untuk memodifikasi file unit.


Dalam kasus A Membutuhkan B , apa yang akan mengatakan "B" telah "gagal" sehingga A tidak akan dimulai? Program B mengembalikan nilai Non-nol?
John Wang

2
Diturunkan karena ini menyarankan praktik yang buruk. Jangan mengedit /usr/lib/systemdversi file unit kecuali Anda adalah seorang pengelola distro atau Anda menikmati file Anda ditimpa pada setiap pembaruan paket. Salin file unit ke dalam /etc/systemddan kemudian edit, atau gunakan file drop-in (lihat systemd.unit (5) untuk detailnya). Lebih mudah lagi, cukup gunakan systemctl edit smb.serviceyang melakukan drop-in file magic secara otomatis!
Jeremy Visser

3
Terima kasih telah mengedit jawabannya! Itu menyelesaikan masalah, dan saya telah mengonversi ke upvote. :-)
Jeremy Visser

10

Lakukan dua hal:

  1. Edit /lib/systemd/system/smb.servicefile unit, untuk menentukan ketergantungan. The [unit]Bagian berisi After=garis yang menentukan layanan apa / target harus dicapai sebelum ini.

    After=syslog.target network.target nmb.service winbind.service
    

    Ubah ke:

    After=dirsrv.target syslog.target network.target nmb.service winbind.service
    
  2. Laporkan ketergantungan ini kembali ke Fedora sebagai bug , sehingga dapat dimasukkan dalam rilis mendatang.


Sepertinya itu tidak berhasil. Samba masih melakukan booting sebelum 389.
Dylan Klomparens

3
setelah Anda memodifikasi unitfile, Anda biasanya harus menjalankansystemctl daemon-reload
scottyseus

2

Anda mungkin perlu mengubah atau memasukkan baris dengan Requiresarahan di [Unit] bagian /usr/lib/systemd/system/smb.servicefile.

Requires=dirsrv.target

dan

After=dirsrv.target

Yah, saya telah memilih jawaban ini, namun, saya pribadi akan pergi dengan Mau = dirsrv.target bukan Membutuhkan =. (lihat systemd.unit (5) untuk Mau =)
galaksi

2

Ada dua alternatif untuk memodifikasi file layanan di /usr/lib/systemd/system(lihat Contoh 2. Mengesampingkan pengaturan vendor ):

  1. Salin file ke /etc/systemd/systemdan lakukan modifikasi pada salinan. File ini akan sepenuhnya menimpa file di /usr/lib.

  2. Buat file /etc/systemd/system/smb.service.d/local.conf. Isi file harus seperti contoh di bawah ini. Ini selektif menimpa opsi "Membutuhkan" dan "Setelah" di file layanan yang disediakan vendor.

Masing-masing (termasuk memodifikasi file dalam /usr/lib) menawarkan kelebihan dan kekurangan. Pilihan terbaik mungkin tergantung pada layanan dan sifat modifikasi.

Meskipun mungkin berfungsi, tidak cukup hanya menambahkan opsi "Setelah" (lihat Opsi Bagian [Unit] ). "Setelah" mengontrol ketertiban, tetapi bukan ketergantungan. Jika dirsrv.targettidak dimulai dengan cara lain, menentukan pesanan tidak akan memulainya. Penggunaan opsi "Memerlukan" atau "Ingin" akan memaksa dirsrv.targetuntuk memulai.

[Unit]
Requires=dirsrv.target
After=dirsrv.target

NB: Saya tidak tahu apakah pendekatan ini tersedia ketika pertanyaan ini awalnya diajukan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.