я не знаю об ответах ниже, но в RHEL / Centos 7.6 init 1или init 3или init 5или init 6или init 0или runlevelвсе еще веду себя так, как они всегда, и это все, что меня волнует. Гораздо проще синтаксис, тоsystemctl blabla blabla.blabla
В 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 TARGETDESTINATION
-s создает символическую ссылку
-f удаляет существующий файл назначения
ИЛИ (как предложено @centimane) просто используйте команду "blessed" systemd:
Могу ли я использовать команду init для переключения между уровнями выполнения?
drpaneas
2
Если ваш пакет systemd собран с поддержкой SysV compat, он будет включать символическую ссылку telinit на двоичный файл systemd, который, когда он называется telinit, отобразит уровни выполнения 0-6 на цели systemd - проверьте telinit (8) для получения списка этих отображений ,
Виланд
2
Чтобы изменить цель по умолчанию, вы должны использовать, systemctl set-default [target name].targetа не создавать ссылку вручную.
Сентимане
13
Нет. Поскольку сами системные пользователи писали дважды, один раз в своем telinitруководстве и один раз в своем runlevelруководстве, уровни выполнения «устарели». Вы можете забыть об уровнях запуска.
Эти вещи на самом деле вообще не существуют в systemd, за исключением нескольких совместимостей.
Есть несколько символических ссылок для имен целей, но эти цели фактически никогда не используются собственно systemd.
Скорее, процесс начальной загрузки использует default.target(и, следовательно, один или оба из a graphical.targetи a multi-user.target), a rescue.targetили an emergency.target. И процесс выключения включает в себя shutdown.target, а reboot.target, а halt.targetили а poweroff.target. Цели на уровне выполнения не задействованы ни в начальной загрузке, ни в завершении работы.
Команда telinit, которая, как можно подумать, использует символические ссылки совместимости для сопоставления аргументов командной строки, также не делает этого. Там в проводному таблицы в исходном коде telinitпрограммы, а числа 2, 3, 4и , 5как аргументы команды являются жестко сопоставить multi-user.targetи graphical.target.
systemd-update-utmp также имеет внутренний проводной стол.
Не существует "таблицы инициализации" вещей уровня запуска. systemd совместим только с van Smoorenburg rc, но не с van Smoorenburg init.
Не существует значения «текущий уровень запуска», поддерживаемого самой systemd. Скорее, почти полностью недокументированная systemd-update-utmpкоманда работает внутри с точки зрения состояний активации rescue.target, multi-user.targetи graphical.target.
systemd-sysv-generatorГенератор сервисных модулей обратной совместимости systemd объединяет /etc/rc[234].dкаталоги только в одно Wanted-Byотношение multi-user.targetсгенерированных сервисных модулей. Нет фактической ссылки на уровни выполнения в сгенерированных единицах обслуживания. (Это было много лет назад, но системные люди обнаружили, что это пошло не так, потому что на них больше не ссылались.)
Если вы являетесь пользователем системы, которая собирает systemd, как это делал Arch Linux для спрашивающего в разделе «Почему` init 0` приводит к «Избыточным аргументам» при установке Arch? », То вы даже не получаете совместимые прокладки и команды такого типа. как init 0результат "родного" поведения systemd, которое должно жаловаться, что команда была вызвана неправильно.
дальнейшее чтение
Поттеринг и др .. runlevel. Системные справочные страницы. Freedesktop.org.
Поттеринг и др .. telinit. Системные справочные страницы. Freedesktop.org.
Поттеринг и др .. bootup. Системные справочные страницы. Freedesktop.org.
Итак, как вы можете видеть, концепция уровней запуска действительно существует, но она довольно устарела из-за того, что файлы runlevel.target на самом деле не являются «настоящими» файлами, а представляют собой программные ссылки на новую, современную схему файлов с лучшими именами, которая systemd любит называть их «целями».
Итак, если вы хотите сделать telinit 5что-то вроде этого, это будет выглядеть так: systemctl isolate runlevel5.target
что совпадает с: systemctl isolate graphical.target(рекомендуется на мой взгляд).
На всякий случай вам интересно узнать все возможные цели:
Да, я считаю, что вы все правильно поняли. Я буду поздним последователем SystemD, поскольку процедурная, пошаговая, INIT.D система - это то, с чем я больше всего знаком ... Я приветствую, что вы изучаете SystemD. Лучшая часть SystemD - это параллельная многопоточность, которая обеспечивает более быструю загрузку. Многопоточная загрузка может быть выполнена с INIT.D, но требует сильного сценария BASH.
Тайлер Магиннис,
Кстати, ls -llэквивалентно ls -l. Возможно, вы захотите привыкнуть к использованию ls -ld.
G-Man говорит «Восстановить Монику»
telinit 0/ telinit 6еще работаю. Поскольку это помогает с миграцией, и я думаю, что большинство дистрибутивов до сих пор не видят причины для отказа от поддержки. isolateясно стремился подражать, как работают уровни выполнения, но есть различные случаи злого края. Я настоятельно рекомендую игнорировать все инструкции isolate runlevel5.targetили даже isolate graphical.target. Пример
крайнего
0
systemd представил цели в качестве аналога уровней запуска в системе инициализации sysV. Разработчики sytemd сделали его практически совместимым с большинством сценариев sysV. То же самое происходит для
telinit <runlevel>. Это переводится в системный эквивалент.
Например, telinit 0выключает машину. systemd имеет poweroff.target, чтобы сделать то же, что и уровень запуска 0 . Так telinit 0переводится systemd для активации poweroff.target .
init 1
илиinit 3
илиinit 5
илиinit 6
илиinit 0
илиrunlevel
все еще веду себя так, как они всегда, и это все, что меня волнует. Гораздо проще синтаксис, тоsystemctl blabla blabla.blabla
Ответы:
SystemD Run-Level Low-Down
В SystemD (aemon) уровни выполнения выставляются как «цели». Концепция все еще там, но рабочий процесс для получения желаемого результата для вашего требования отличается.
Прилагаемый должен прояснить этот вопрос.
Как мне изменить текущий уровень выполнения?
Как изменить уровень запуска по умолчанию для следующей загрузки?
ln -sf TARGET DESTINATION
-s
создает символическую ссылку-f
удаляет существующий файл назначенияИЛИ (как предложено @centimane) просто используйте команду "blessed"
systemd
:Как определить текущий уровень выполнения?
источник
systemctl set-default [target name].target
а не создавать ссылку вручную.Нет. Поскольку сами системные пользователи писали дважды, один раз в своем
telinit
руководстве и один раз в своемrunlevel
руководстве, уровни выполнения «устарели». Вы можете забыть об уровнях запуска.Эти вещи на самом деле вообще не существуют в systemd, за исключением нескольких совместимостей.
default.target
(и, следовательно, один или оба из agraphical.target
и amulti-user.target
), arescue.target
или anemergency.target
. И процесс выключения включает в себяshutdown.target
, аreboot.target
, аhalt.target
или аpoweroff.target
. Цели на уровне выполнения не задействованы ни в начальной загрузке, ни в завершении работы.telinit
, которая, как можно подумать, использует символические ссылки совместимости для сопоставления аргументов командной строки, также не делает этого. Там в проводному таблицы в исходном кодеtelinit
программы, а числа2
,3
,4
и ,5
как аргументы команды являются жестко сопоставитьmulti-user.target
иgraphical.target
.systemd-update-utmp
также имеет внутренний проводной стол.rc
, но не с van Smoorenburginit
.systemd-update-utmp
команда работает внутри с точки зрения состояний активацииrescue.target
,multi-user.target
иgraphical.target
.systemd-sysv-generator
Генератор сервисных модулей обратной совместимости systemd объединяет/etc/rc[234].d
каталоги только в одноWanted-By
отношениеmulti-user.target
сгенерированных сервисных модулей. Нет фактической ссылки на уровни выполнения в сгенерированных единицах обслуживания. (Это было много лет назад, но системные люди обнаружили, что это пошло не так, потому что на них больше не ссылались.)Если вы являетесь пользователем системы, которая собирает systemd, как это делал Arch Linux для спрашивающего в разделе «Почему` init 0` приводит к «Избыточным аргументам» при установке Arch? », То вы даже не получаете совместимые прокладки и команды такого типа. как
init 0
результат "родного" поведения systemd, которое должно жаловаться, что команда была вызвана неправильно.дальнейшее чтение
runlevel
. Системные справочные страницы. Freedesktop.org.telinit
. Системные справочные страницы. Freedesktop.org.bootup
. Системные справочные страницы. Freedesktop.org./etc/inittab
это вещь прошлого. , Часто задаваемые ответы.источник
Огромное спасибо. Итак, если я правильно понял:
Например:
Выход:
Итак, как вы можете видеть, концепция уровней запуска действительно существует, но она довольно устарела из-за того, что файлы runlevel.target на самом деле не являются «настоящими» файлами, а представляют собой программные ссылки на новую, современную схему файлов с лучшими именами, которая systemd любит называть их «целями».
Итак, если вы хотите сделать
telinit 5
что-то вроде этого, это будет выглядеть так:systemctl isolate runlevel5.target
что совпадает с:systemctl isolate graphical.target
(рекомендуется на мой взгляд).На всякий случай вам интересно узнать все возможные цели:
источник
ls -ll
эквивалентноls -l
. Возможно, вы захотите привыкнуть к использованиюls -ld
.telinit 0
/telinit 6
еще работаю. Поскольку это помогает с миграцией, и я думаю, что большинство дистрибутивов до сих пор не видят причины для отказа от поддержки.isolate
ясно стремился подражать, как работают уровни выполнения, но есть различные случаи злого края. Я настоятельно рекомендую игнорировать все инструкцииisolate runlevel5.target
или дажеisolate graphical.target
. Примерsystemd представил цели в качестве аналога уровней запуска в системе инициализации sysV. Разработчики sytemd сделали его практически совместимым с большинством сценариев sysV. То же самое происходит для
telinit <runlevel>
. Это переводится в системный эквивалент.Например,
telinit 0
выключает машину. systemd имеет poweroff.target, чтобы сделать то же, что и уровень запуска 0 . Такtelinit 0
переводится systemd для активации poweroff.target .Но есть некоторые проблемы совместимости с системами инициализации sytemd и sysV-> https://www.freedesktop.org/wiki/Software/systemd/Incompatibilities .
источник