我习惯了调用init 0
shutdown的老方法。不好,我知道;但是当我在新的 Arch 安装上尝试它时,我得到了这个:
# init 0
Excess Arguments
这让我很困惑,因为我认为systemd
应该支持运行级别?查看手册页,它提到了这一点:
为了与 SysV 兼容,如果 systemd 被称为 init 并且 PID 不为 1,它将执行 telinit 并传递所有未修改的命令行参数。这意味着 init 和 telinit 在从正常登录会话调用时基本上是等效的。有关详细信息,请参阅 telinit(8)。
我只是使用了错误的语法还是我完全误解了systemd
?
更多初始化/系统信息
# command -v init
/usr/bin/init
# file /bin/init
/usr/bin/init: symbolic link to ../lib/systemd/systemd
# /lib/systemd/systemd --version
systemd 234
+PAM -AUDIT -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN default-hierarchy=hybrid
# command -v telinit
/usr/bin/telinit
# file /bin/telinit
/bin/telinit: symbolic link to systemctl
# systemctl --version
systemd 234
+PAM -AUDIT -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN default-hierarchy=hybrid
一般系统信息
# uname -a
Linux arch 4.12.5-1-ARCH #1 SMP PREEMPT Fri Aug 11 12:40:21 CEST 2017 x86_64 GNU/Linux
# bash --version
GNU bash, version 4.4.12(1)-release (x86_64-unknown-linux-gnu)
答案1
为了与 SysV 兼容,[...]
系统234 […]-SYSVINIT […]
您构建的 systemd 没有兼容性选项,因此手册中描述的兼容性行为不会出现。
答案2
据我从你的符号链接中可以看出,这就是问题所在。
如果你init
是一个符号链接,systemd
那么你需要看看 systemd 可以得到什么作为参数。
systemd [OPTIONS...]
Starts up and maintains the system or user services.
-h --help Show this help
--test Determine startup sequence, dump it and exit
--no-pager Do not pipe output into a pager
--dump-configuration-items Dump understood unit configuration items
--unit=UNIT Set default unit
--system Run a system instance, even if PID != 1
--user Run a user instance
--dump-core[=BOOL] Dump core on crash
--crash-vt=NR Change to specified VT on crash
--crash-reboot[=BOOL] Reboot on crash
--crash-shell[=BOOL] Run shell on crash
--confirm-spawn[=BOOL] Ask for confirmation when spawning processes
--show-status[=BOOL] Show status updates on the console during bootup
--log-target=TARGET Set log target (console, journal, kmsg, journal-or-kmsg, null)
--log-level=LEVEL Set log level (debug, info, notice, warning, err, crit, alert, emerg)
--log-color[=BOOL] Highlight important log messages
--log-location[=BOOL] Include code location in log messages
--default-standard-output= Set default standard output for services
--default-standard-error= Set default standard error output for services
所以问题是你实际上没有真实的init
,而只是一个链接的systemd
答案3
有一个额外的软件包“systemd-sysvcompat”,之后您可以sysvinit 0
(也许还有 telinit) - 但随后您再次需要这个 inittab,并且 Slackware 14.2 的停止/关闭/重新启动(那里没有 systemd)并没有说服我。
这/usr/bin/sysvinit与“旧”init 大小相同,里面写着:GCC: (GNU) 4.9.2
,并且[email protected]
(我知道这个名字!他写了 sysvinit!)。所以这是 sysv-init。他们只需要重新命名它。在包中它被称为/usr/bin/init。
唉,可怜的伊尼特!就这样被人推来推去!
re:6:once:/sbin/reboot
这是我用 启动时使用的 inittab init=/usr/bin/sysvinit
。 /sbin/reboot 是...systemctl 的链接!好吧,它有效,但我并不是说继续......(不是我的发明,我发现它就像 archlinux 安装的那样)