Czy systemd nadal wie o poziomach pracy?


17

Czy systemd nadal ma koncepcję poziomów pracy? Na przykład, czy nie ma sensu używać telinit <number>?



nie wiem o poniższych odpowiedzi, ale w RHEL / Centos 7.6 init 1lub init 3lub init 5lub init 6lub init 0lub runlevelnadal zachowują się jak oni zawsze mają, i to wszystko mnie obchodzi. Znacznie łatwiejsza składniasystemctl blabla blabla.blabla
ron

Odpowiedzi:


14

SystemD Run-Level Low-Down

W SystemD (aemon) poziomy uruchamiania są widoczne jako „Cele”. Koncepcja wciąż istnieje, ale przepływ pracy w celu uzyskania pożądanego rezultatu dla twoich wymagań jest inny.

W załączeniu należy wyjaśnić tę kwestię.

Jak zmienić bieżący poziom działania?

$ systemctl isolate runlevelX.target

Jak zmienić domyślny poziom uruchamiania dla następnego rozruchu?

# Create a symlink
$ ln -sf /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
  • ln -sf TARGET DESTINATION
  • -s tworzy dowiązanie symboliczne
  • -f usuwa istniejący plik docelowy

LUB (jak sugeruje @centimane) po prostu użyj polecenia „błogosławiony” systemd:

systemctl set-default [target name].target

Jak zidentyfikować bieżący poziom działania?

$ systemctl list-units --type=target

Czy nadal mogę używać polecenia init do przełączania między poziomami działania?
drpaneas

2
Jeśli twój pakiet systemd jest zbudowany ze wsparciem dla SysV, będzie zawierał dowiązanie symboliczne telinit do binarnego systemd, które po wywołaniu jako telinit odwzoruje poziomy uruchamiania 0-6 na cele systemowe - sprawdź telinit (8), aby uzyskać listę tych mapowań .
Wieland

2
Aby zmienić domyślny cel, powinieneś użyć systemctl set-default [target name].targetzamiast ręcznie tworzyć link.
Centimane

13

Nie. Jak sami ludzie systemowi napisali dwa razy, raz w telinitpodręczniku i raz w runlevelpodręczniku, poziomy uruchamiania są „przestarzałe”. Możesz zapomnieć o poziomach pracy.

Te rzeczy w ogóle nie istnieją w systemie, bez kilku podkładek kompatybilności.

  • Istnieje kilka dowiązań symbolicznych dla nazw celów, ale cele te nigdy nie są właściwie używane przez systemd.
    • Raczej proces ładowania początkowego wykorzystuje default.target(a stąd jeden lub oba z a graphical.targeti a multi-user.target), a rescue.targetlub an emergency.target. A proces zamykania obejmuje a shutdown.target, a reboot.target, a halt.targetlub a poweroff.target. Żadne cele docelowe nie są zaangażowane ani w bootstrap, ani w zamknięcie.
    • telinitPoleceń, które można by pomyśleć korzysta z kompatybilnością symboliczne linki do mapy swoje argumenty wiersza poleceń, nie robi albo. Jest przewodowych tabeli w kodzie źródłowym telinitprogramu, a numery 2, 3, 4, i 5jako argumenty polecenia były włączone do mapowania multi-user.targeti graphical.target.
    • systemd-update-utmp ma również wewnętrzny stolik przewodowy.
  • Nie ma „tabeli inicjacji” elementów poziomu pracy. Systemd jest kompatybilny tylko z van Smoorenburg rc, a nie z van Smoorenburg init.
  • Sam systemd nie utrzymuje wartości „bieżącego poziomu pracy”. Przeciwnie, niemal całkowicie nieudokumentowana systemd-update-utmpkomenda działa wewnętrznie pod względem aktywacji Zjednoczone rescue.target, multi-user.targetoraz graphical.target.
  • systemd-sysv-generator, systemd generator jednostek usług kompatybilności wstecznej, łączy /etc/rc[234].dkatalogi w jedną Wanted-Byrelację do multi-user.targetgenerowanych jednostek usług. Brak rzeczywistego odniesienia do poziomów uruchamiania w wygenerowanych jednostkach serwisowych. (Kiedyś, dawno temu, ale usystematyzowani ludzie stwierdzili, że to poszło nie tak, ponieważ nie było ich nigdzie indziej.)

Jeśli ktoś jest użytkownikiem systemu, który buduje systemd, podobnie jak Arch Linux dla pytającego w „ Dlaczego„ init 0 ”powoduje„ Nadmiar argumentów ”podczas instalacji Arch? ”, To nawet nie dostaje podkładek kompatybilności i takie polecenia w init 0wyniku „systemowego” zachowania systemowego, które polega na narzekaniu, że polecenie zostało niepoprawnie wywołane.

Dalsza lektura


4

Dziękuję bardzo. Więc jeśli dobrze zrozumiałem:

Na przykład:

ls -ll /usr/lib/systemd/system/runlevel*.target

Wynik:

/usr/lib/systemd/system/runlevel0.target -> poweroff.target
/usr/lib/systemd/system/runlevel1.target -> rescue.target
/usr/lib/systemd/system/runlevel2.target -> multi-user.target
/usr/lib/systemd/system/runlevel3.target -> multi-user.target
/usr/lib/systemd/system/runlevel4.target -> multi-user.target
/usr/lib/systemd/system/runlevel5.target -> graphical.target
/usr/lib/systemd/system/runlevel6.target -> reboot.target

Jak widać, koncepcja poziomów działania istnieje, ale jest dość przestarzała, ponieważ pliki runlevel.target nie są tak naprawdę „prawdziwymi” plikami, ale miękkimi linkami do nowego, nowoczesnego, lepiej nazwanego schematu plików, który systemd lubi nazywać je „celami”.

Więc jeśli chciałbyś zrobić coś takiego, telinit 5to byłoby tak: systemctl isolate runlevel5.target co jest identyczne z: systemctl isolate graphical.target(moim zdaniem zalecane).

Na wypadek, gdybyś był zainteresowany wszystkimi możliwymi celami:

ls /usr/lib/systemd/system/*.target

Tak, uważam, że rozumiesz to poprawnie. Spóźnię się z przyjęciem SystemD, ponieważ system INIT.D, krok po kroku, jest tym, co znam najbardziej ... Pochwalam, że odkrywasz SystemD. Najlepszą częścią SystemD jest równoległe wielowątkowość, która umożliwia szybsze uruchamianie. Uruchamianie wielowątkowe można wykonać za pomocą INIT.D, ale wymaga silnego skryptu BASH.
Tyler Maginnis

BTW, ls -lljest równoważne z ls -l. Możesz przyzwyczaić się do używania ls -ld.
G-Man mówi „Przywróć Monikę”

telinit 0/ telinit 6wciąż pracuję. Ponieważ pomaga to w migracji, i myślę, że większość dystrybucji wciąż nie widzi powodu, aby zrezygnować z obsługi. isolatewyraźnie dążyło do naśladowania działania poziomów uruchamiania, ale istnieją różne przypadki zła. Bardzo polecam ignorowanie wszystkich instrukcji, isolate runlevel5.targeta nawet isolate graphical.target. Przykładowy przypadek na krawędzi: github.com/systemd/systemd/issues/6505
sourcejedi

0

Systemd wprowadzono cele jako odpowiednik dla poziomów pracy w init sysv. programiści sytemd sprawili, że jest prawie kompatybilny z większością skryptów sysV. To samo dzieje się z telinit <runlevel>. Przekłada się to na odpowiednik systemowy.

Na przykład telinit 0wyłącza maszynę. systemd ma poweroff.target, aby zrobić to samo co poziom pracy 0 . Tak telinit 0jest tłumaczone przez systemd, aby aktywować poweroff.target .

Ale istnieją pewne problemy ze zgodnością w systemach inicjujących sytemd i sysV-> https://www.freedesktop.org/wiki/Software/systemd/Incompatabilities .

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.