Чи все ще systemd знає про рівні рівня?


17

Чи все ще має systemd концепція рівнів? Наприклад, чи безглуздо використовувати telinit <number>?


2
Можливий дублікат Change runlevel з systemd
Стівен Харріс

я не знаю , про відповідях нижче, але в RHEL / Centos 7,6 init 1або init 3або init 5або init 6або init 0або runlevelще поводяться , як вони завжди є, і це все , що мене хвилює. Набагато простіший синтаксис тодіsystemctl blabla blabla.blabla
ron

Відповіді:


14

SystemD Run-Level низький вниз

У межах SystemD (aemon) рівні запуску виставляються як "Цілі". Концепція все ще існує, але робочий процес для отримання бажаного результату для вашої потреби відрізняється.

Додане має уточнити це питання.

Як змінити поточний рівень запуску?

$ systemctl isolate runlevelX.target

Як змінити рівень запуску за замовчуванням для наступного завантаження?

# Create a symlink
$ ln -sf /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
  • ln -sf TARGET DESTINATION
  • -s створює символічний зв’язок
  • -f видаляє існуючий файл призначення

АБО (як @centimane запропонував) просто використовуйте команду "блаженний" systemd:

systemctl set-default [target name].target

Як визначити поточний рівень запуску?

$ systemctl list-units --type=target

Чи можу я все-таки використовувати команду init для перемикання між рівнем запуску?
drpaneas

2
Якщо ваш системний пакет побудований з підтримкою compat compat, він буде включати в себе символьне посилання telinit до системного бінарного файлу, яке, коли його називатимуть як telinit, буде відображати рівні пробігу 0-6 до системних цілей - перевіряйте telinit (8) на список цих відображень .
Wieland

2
Для зміни цілі за замовчуванням слід скористатися, systemctl set-default [target name].targetа не створювати посилання вручну.
Centimane

13

Ні. Як писали самі систематизовані люди двічі, один раз у своєму telinitпосібнику та один раз у runlevelпосібнику, рівні випуску "застаріли". Про пробіжки можна забути.

Такі речі насправді не існують у systemd, поза кількома лайками сумісності.

  • Існують деякі символьні посилання на назви цілей, але ці цілі ніколи фактично не використовуються належним чином системою.
    • Швидше, процес завантаження завантажує default.target(а звідси один або обидва з а graphical.targetі а multi-user.target), а rescue.targetчи ан emergency.target. А процес вимкнення включає в себе a shutdown.target, a reboot.target, a halt.targetабо a poweroff.target. Жодна ціль рівня запуску не бере участь ні в завантажувальній, ні в завершенні роботи.
    • telinitКоманда, можна подумати , використовує в режимі сумісності символічні посилання на карту свої аргументи командного рядка, не робити що небудь. Там в провідному таблиці у вихідному коді telinitпрограми, а числа 2, 3, 4і , 5як аргументи команди є жорстко зіставити multi-user.targetі graphical.target.
    • systemd-update-utmp також має внутрішню провідну таблицю.
  • Немає «таблиці ініціатів» з матеріалів, що працюють на рівні бігу. systemd сумісний лише з ван Smoorenburg rc, а не з Van Smoorenburg init.
  • Немає значення "поточного рівня запуску", що підтримується самим systemd. Швидше за все , майже повністю недокументированная systemd-update-utmpкоманда працює всередині з точки зору активації Штатів rescue.target, multi-user.targetі graphical.target.
  • systemd-sysv-generator, генератор службової одиниці сумісності системи, що об'єднує назад, об'єднує /etc/rc[234].dкаталоги лише в одне Wanted-Byвідношення до multi-user.targetстворених блоків обслуговування Фактичних посилань на рівні запуску в створених блоках обслуговування немає. (Раніше це було років тому, але системні люди виявили, що це пішло не так, тому що їх ніде не посилали.)

Якщо хтось є користувачем системи, яка будує systemd, як це робив Arch Linux для запитувача на " Чому` init 0` призводить до "Надлишкових аргументів" для Arch встановлюється? ", Людина навіть не отримує тривоги сумісності, і командує такими як init 0результат в "рідній" системній поведінці, яка полягає у скарзі на те, що команда була неправильно викликана.

Подальше читання


4

Дуже дякую. Отже, якщо я правильно зрозумів:

Наприклад:

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

Вихід:

/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

Отже, як ви бачите, концепція запуску рівнів існує, але вона є досить застарілою через те, що файли runlevel.target насправді не є "реальними" файлами, а м'якими посиланнями на нову, сучасну, краще названу схему файлів, яка systemd любить називати їх «цілями».

Отже, якщо ви хочете зробити що-небудь так, telinit 5це було б так: systemctl isolate runlevel5.target що тотожно: systemctl isolate graphical.target(на мій погляд).

Про всяк випадок, коли вам цікаво знати всі можливі цілі:

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

Так, я вважаю, що ви це правильно розумієте. Я буду пізно прийняти SystemD, оскільки процедура INIT.D, що стосується процедур, покроковий крок, - це те, що мені найбільше знайоме ... Я аплодую, що ви вивчаєте SystemD. Найкращою частиною SystemD є його паралельне багатопотокове навантаження, що дозволяє швидше завантажувати. Запуск багатопотокового завантаження може бути виконаний за допомогою INIT.D, але вимагає сильного сценарію BASH.
Тайлер Маднніс

BTW, ls -llеквівалентно ls -l. Можливо, ви захочете ввійти в звичку користуватися ls -ld.
G-Man каже: "Відновіть Моніку"

telinit 0/ telinit 6все ще працюють. Оскільки це допомагає міграції, і я думаю, що більшість дистрибутивів досі не бачать причин відмовлятися від підтримки. isolateявно прагнув наслідувати, як працюють рівні бігу, але є різні випадки злого краю. Я настійно рекомендую ігнорувати всі інструкції до isolate runlevel5.targetабо навіть isolate graphical.target. Приклад крайового випадку: github.com/systemd/systemd/isissue/6505
sourcejedi

0

systemd представив цілі як аналог для бігових рівнів у системі sysV init. Розробники sytemd зробили це майже сумісним з більшістю скриптів sysV. Те саме відбувається і для telinit <runlevel>. Це переводиться в системний еквівалент.

Наприклад, telinit 0вимкнення машини. systemd має poweroff.target, щоб зробити так само, як runlevel 0 . Так telinit 0перекладається systemd, щоб активувати poweroff.target .

Але є деякі проблеми сумісності із системами sytemd та sysV init-> https://www.freedesktop.org/wiki/Software/systemd/Incompatiibility .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.