systemd仍然知道运行级别吗?


17

systemd仍然具有运行级别的概念吗?例如,使用毫无意义telinit <number>吗?



我不知道下面的答案,但是在RHEL / Centos 7.6中 init 1init 3or init 5init 6or init 0or or runlevel仍然像往常一样运行,这就是我所关心的。语法就容易多了systemctl blabla blabla.blabla
RON

Answers:


14

SystemD运行级别低下

在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建议)只需使用“ blessed” systemd命令:

systemctl set-default [target name].target

如何确定当前运行水平?

$ systemctl list-units --type=target

我仍然可以使用init命令在运行级别之间切换吗?
drpaneas 2014年

2
如果您的systemd软件包是使用SysV compat支持构建的,它将包含一个telinit符号链接到systemd二进制文件,该链接被称为telinit时,会将运行级别0-6映射到systemd目标-检查telinit(8)以获得这些映射的列表。 。
维兰2014年

2
要更改默认目标,应使用systemctl set-default [target name].target而不是手动创建链接。
Centimane

13

不会。因为系统化的人员自己重复两次,一次在他们的telinit手册中,一次在他们的runlevel手册中,运行级别“过时”。您可以忘记运行级别。

这些东西实际上在systemd中根本不存在,除了一些兼容性垫片。

  • 目标名称有一些符号链接,但是systemd属性实际上从未真正使用过这些目标。
    • 相反,引导过程使用a default.target(和a graphical.target和a 之一或两者multi-user.target),a rescue.target或an emergency.target。关闭过程涉及a shutdown.target,a reboot.target,a halt.target或a poweroff.target。 引导或关闭过程均不涉及运行级目标
    • telinit人们可能会认为该命令使用兼容性符号链接来映射其命令行参数,但该命令也不会这样做。有一个在源代码的硬连线的表telinit程序,并且该号码234,和5作为参数的命令被硬连线到映射到multi-user.targetgraphical.target
    • systemd-update-utmp 还有一个内部硬接线表。
  • 没有运行级别的东西的“初始化表”。systemd仅与van Smoorenburg兼容rc,而不与van Smoorenburg 兼容init
  • systemd本身不维护“当前运行级别”值。相反,几乎全部未记录的systemd-update-utmp命令,在激活的项内部操作的状态rescue.targetmulti-user.targetgraphical.target
  • systemd-sysv-generatorsystemd的向后兼容服务单元生成器将/etc/rc[234].d目录合并为生成的服务单元中的一个Wanted-By关系multi-user.target。在生成的服务单元中没有运行级别的实际参考。(几年前曾经有过,但是系统化的人们发现这是错误的,因为在其他任何地方都没有引用过它们。)

如果一个人是在问他的Arch Linux的是建立一个systemd系统的用户“ 为什么`初始化0`导致‘过剩参数’上拱安装? ”,一个甚至没有获得兼容性垫片,和这样的命令作为init 0结果,在“本机” systemd行为,这是抱怨命令已被不正确地调用。

进一步阅读


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脚本。
Tyler Maginnis 2014年

顺便说一句,ls -ll等于ls -l。您可能想养成使用的习惯ls -ld
G-Man说'Resstate Monica''May

telinit 0/ telinit 6仍然有效。由于这有助于迁移,因此我认为大多数发行版仍然看不到放弃支持的理由。isolate显然希望模仿运行级别的工作原理,但是存在各种恶性情况。我强烈建议您忽略isolate runlevel5.target甚至所有的指示isolate graphical.target。边缘案例示例:github.com/systemd/systemd/issues/6505
sourcejedi,

0

systemd引入了目标,作为sysV init系统中运行级别的对应对象。系统开发人员使其几乎与大多数sysV脚本兼容。也会发生同样的情况 telinit <runlevel>。这被翻译成systemd等效项。

例如telinit 0关闭机器电源。systemd具有poweroff.targetrunlevel 0相同。因此telinit 0由systemd转换为激活poweroff.target

但是sytemd和sysV初始化系统存在一些兼容性问题-> https://www.freedesktop.org/wiki/Software/systemd/Incompatibilities

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.