Mylić o „/etc/init.d” i usługach w „/ lib / systemd / system”


15

Jestem zupełnie nowy w świecie Linuksa, więc przepraszam za cokolwiek złego, co mogę powiedzieć.

Próbuję uruchomić bazę danych Mongo na maszynie Debian 8.5. Kiedy zainstalowałem pakiet (wcześniej zbudowany z percona.com), zauważyłem następujące pliki:

/etc/init.d/mongod (1)
/lib/systemd/system/mongod.service (2)

Informacje o /etc/init.d/mongod

Rozumiem, że jest to wywoływane (o ile jest zarejestrowane przez update-rc.d) podczas rozruchu / w innych szczególnych stanach systemu (nie chcę zajmować się tym technicznie, pochłaniam wiele informacji i wydaje się to mniej ważne).

To jest dla mnie idealnie. Skrypt wykonuje wiele inicjalizacji i wreszcie uruchamia demona mongo. Wydaje się, że ma „wyzwalacze” do uruchamiania, zatrzymywania, restartowania itp. I, o ile rozumiem, mogę je uruchomić sudo service mongod <action>.

Informacje o /lib/systemd/system/mongod.service

Ten plik wydaje się robić to samo (tj. Uruchamiać mongo), ale przy mniejszej konfiguracji, tylko jeden wiersz w parametrze ExecStart:

[Unit]
Description=MongoDB (High-performance, schema-free document-oriented database)
After=time-sync.target network.target
[Service]
Type=forking
User=mongod
Group=mongod
PermissionsStartOnly=true
EnvironmentFile=/etc/default/mongod
ExecStart=/usr/bin/env bash -c "/usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}"
PIDFile=/var/run/mongod.pid
[Install]
WantedBy=multi-user.target

O ile rozumiem, można to uruchomić sudo systemctl start mongod.

  • Nie rozumiem, czy jest to wywoływane przy rozruchu, czy nie.

  • Nie rozumiem, dlaczego potrzeba dwóch z tych plików „serwisowych” i jak mogę się ich pozbyć (być może ten w / lib / systemd, ponieważ jest o wiele prostszy).

  • Nie rozumiem, czy istnieje jakikolwiek związek między nimi.

  • Przeczytałem, że systemctldziała również na init.dskrypty i w tym przypadku nie rozumiem, który z tych dwóch plików zostanie uruchomiony systemctl mongod start.

Myślę , że jest trochę redundancji i powinienem wybrać tylko jeden z dwóch sposobów. I chcę mieć pewność, że tak jest

  • wywoływany podczas rozruchu
  • wywoływalne za pomocą polecenia (jak servicelub systemctl).

Czy możesz mi pomóc oczyścić umysł? Przy pomocy niektórych komentarzy prawdopodobnie mogę skupić się i zawęzić pytanie.

Odpowiedzi:


12

Jeśli masz zarówno init.dskrypt, jak i .serviceplik systemowy o tej samej nazwie, systemd użyje pliku usługi do wszystkich operacji. Wierzę, że servicepolecenie po prostu przekieruje do systemd. Skrypt init.d zostanie zignorowany.

Zastosowanie systemd. Jest nowy w Debianie 8, ale jest domyślny. Pliki usług systemowych powinny wyglądać prostiej niż skrypty init.d. Nie wspomniano o żadnej konkretnej potrzebnej funkcji, która nie jest obsługiwana przez usługę systemd.

Jeśli plik usługi nie został dołączony, systemdchętnie skorzystałby ze skryptu init.d. Więc twórca pakietu mongod mówi ci, że uważają, że ta definicja systemowa jest lepsza :).

Spójrz na wynik systemctl status mongod. Jeśli usługa ma być uruchomiona w czasie rozruchu, Loaded:linia pokaże „włączone”. W przeciwnym razie możesz użyć systemctl enable mongod. Możesz także dołączyć opcję --now, która uruchomi mongod w tym samym czasie.


Dziękuję Ci! Mam zamiar uczyć się systemd i ostatecznie go użyć. Na razie chciałem to wyłączyć i wreszcie uruchomić skrypt init.d, nad którym pracowałem. Poszedłem systemctl disable mongod:; następnie przemianowano mongod.service na mongod-backup.service; potem systemctl daemon-reload. Myślisz, że to było poprawne? Przeczytałem, że nie powinieneś modyfikować plików w / lib / systemd / system /, ale bez zmiany nazwy systemctl ciągle ignorował skrypt init.d.
natario

Pliki w / lib / systemd nie są plikami konfiguracyjnymi. Naprawdę nie mogę polecić instalowania pakietu Debian i modyfikowania jego plików (a później aktualizacji pakietu). Zamiast tego powinieneś zmienić nazwę skryptu init.d, nad którym „pracujesz” (prawdopodobnie modyfikujesz?). Skrypty init.d są zwykle konffile. Jeśli aktualizacja zmieni plik konfiguracyjny (z czego nie powinno być żadnego powodu), najpierw cię ostrzeże. W takim przypadku spodziewam się, że powiadomi cię, jeśli kiedykolwiek będzie dostępna zaktualizowana wersja oryginalnego (skutecznie) skryptu init.d.
sourcejedi

Możliwe, że będziesz musiał dodać zależności dotyczące zamawiania do nowej usługi do usług, od których ona zależy mongod. Istnieje również szansa, że ​​będziesz musiał usunąć pewne ścisłe zależności, ale nie sądziłbym, że tak. Bezpiecznym sposobem zmodyfikowania usług, których dotyczy problem, jest skopiowanie ich /etc/systemd/system/i zmodyfikowanie kopii.
sourcejedi

Ogólnie myślę, że trzymanie się systemd jest prostsze. Jesteś teraz studiuje bash, init-functions, oraz funkcje Tył-compat Systemd męska. Ponieważ nie uczysz się czystego systemu inicjującego SysV, jeśli kiedykolwiek użyjesz takiego systemu, istnieje ryzyko, że będziesz oczekiwać funkcji, które faktycznie pochodzą z systemd.
sourcejedi
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.