Zależności systemowe i kolejność rozruchu

20

Muszę określić kolejność rozruchu, aby procesy mogły się uruchomić. Mam 389 Directory Server i Sambę na Fedorze 18. Jak mogę uruchomić usługi sieciowe, potem 389 DS, a potem Samba? Czy istnieje interfejs GUI do zarządzania tym w Fedorze?

Włączyłem Sambę na początek systemctl enable smb.service. Włączyłem również 389 DS z systemctl enable dirsrv.target.

Dylan Klomparens
źródło
Systemd nie wymaga uporządkowania między usługami, chodzi o to, aby uruchomić wszystko równolegle i przekazać połączenia serwerom, gdy tylko będą dostępne. Konfiguracja podana przez domyślną instalację powinna być w porządku. Jak myślisz, dlaczego musisz zdefiniować zamówienie? Czy coś nie działa?
vonbrand
Powinienem też zauważyć, że ponieważ to wróciło, naprawdę nie powinieneś uruchamiać usług plików / drukowania na kontrolerze domeny.
Michael Hampton
@ vonbrand Miałem ten problem, gdy mój serwer DHCP wymagał uruchomienia slapd (ponieważ jego konfiguracja była przechowywana w katalogu LDAP). Gdyby nie to, serwer DHCP nie pojawiłby się.
mat

Odpowiedzi:

25

Służy systemctl edit smb.servicedo aktualizowania zależności.

After=dirsrv.target - Zapewni uruchomienie usługi smb.service po dirsrv.target.

Aby uzyskać solidność (która będzie warta, jeśli będziesz majstrować przy tych rzeczach), możesz również chcieć uwzględnić niektóre z poniższych:

Requires=dirsrv.target- Aktywuj dirsrv.target, gdy aktywowana jest usługa smb. Powoduje błąd smb.service, jeśli dirsrv.target zawiedzie.

Wants=dirsrv.target- Aktywuj dirsrv.target, gdy aktywowana jest usługa smb. Nie spowoduje niepowodzenia usługi smb.service, jeśli dirsrv.target zawiedzie.

BindsTo=dirsrv.target - Jeśli dirsrv.target jest wyłączony, dezaktywuj usługę komuś.

Źródło: http://www.freedesktop.org/software/systemd/man/systemd.unit.html

systemd-uizapewnia GUI dla systemd. Daje dobry obraz stanu systemu, ale nadal będziesz musiał użyć edytora tekstu, aby zmodyfikować pliki jednostek.

Guy Gangemi
źródło
W przypadku A, który wymaga B , co powie, że „B” „nie powiodło się”, więc A nie zostanie uruchomiony? Program B zwraca wartość niezerową?
John Wang,
2
Głosowany, ponieważ sugeruje to złą praktykę. Nie edytuj /usr/lib/systemdwersji plików jednostkowych, chyba że jesteś opiekunem dystrybucji lub podobają ci się pliki nadpisywane przy każdej aktualizacji pakietu. Skopiuj plik jednostki do, /etc/systemda następnie edytuj, lub użyj pliku rozwijanego (szczegółowe informacje można znaleźć w pliku systemd.unit (5)). Jeszcze łatwiejsze, wystarczy użyć, systemctl edit smb.servicektóry automatycznie uruchamia magię plików!
Jeremy Visser
3
Dziękujemy za edycję odpowiedzi! To rozwiązuje problemy, a ja przeszedłem na głosowanie. :-)
Jeremy Visser
10

Wykonaj dwie rzeczy:

  1. Edytuj /lib/systemd/system/smb.serviceplik jednostki, aby określić zależność. [unit]Sekcja zawiera After=wiersz, który określa, jakie usługi / cele powinny zostać osiągnięte przed tym.

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

    Zmień na:

    After=dirsrv.target syslog.target network.target nmb.service winbind.service
    
  2. Zgłoś tę zależność z powrotem do Fedory jako błąd , aby można ją było włączyć w przyszłych wydaniach.

Michael Hampton
źródło
To nie działa. Samba wciąż uruchamia się przed 389.
Dylan Klomparens
3
po zmodyfikowaniu unitplików zwykle powinieneś uruchomićsystemctl daemon-reload
scottyseus
2

być może trzeba zmienić lub dołączyć wiersz z Requiresdyrektywą w [Unit] sekcji /usr/lib/systemd/system/smb.servicepliku.

Requires=dirsrv.target

i

After=dirsrv.target
cturiel
źródło
Cóż, głosowałem na tę odpowiedź, jednak osobiście wybrałbym Wants = dirsrv.target zamiast Wymaga =. (patrz systemd.unit (5) dla Wants =)
galaktyka
2

Istnieją dwie alternatywy modyfikacji pliku usługi w /usr/lib/systemd/system(patrz Przykład 2. Przesłanianie ustawień dostawcy ):

  1. Skopiuj plik /etc/systemd/systemi dokonaj modyfikacji na kopii. Ten plik całkowicie zastąpi plik w /usr/lib.

  2. Utwórz plik /etc/systemd/system/smb.service.d/local.conf. Zawartość pliku powinna być podobna do poniższego przykładu. To selektywnie zastępuje opcje „Wymaga” i „Po” w pliku usługi dostarczonym przez dostawcę.

Każda z nich (w tym modyfikacja pliku /usr/lib) ma zalety i wady. Najlepszy wybór może zależeć od usługi i charakteru modyfikacji.

Chociaż może to działać, nie wystarczy dodać opcję „Po” (patrz Opcje sekcji [Jednostka] ). „Po” kontroluje kolejność, ale nie zależności. Jeśli dirsrv.targetnie zostanie uruchomiony w inny sposób, określenie zamówienia nie uruchomi go. Użycie opcji „Wymaga” lub „Chce” wymusi dirsrv.targeturuchomienie.

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

NB: Nie wiem, czy to podejście było dostępne, kiedy pytanie zostało pierwotnie zadane.

oko
źródło