Arch-Linux

為什麼 init 0 在 Arch 安裝時會導致“Excess Arguments”?

  • June 25, 2019

我習慣了呼叫init 0關機的舊方法。不好,我知道;但是當我在我的新 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) 

為了與 SysV 兼容,$$ … $$

系統化 234
[…]-SYSVINIT […]

您建構的 systemd 沒有兼容性選項,因此手冊中描述的兼容性行為不會出現。

好吧,據我從您的符號連結中可以看出,這就是問題所在。

如果你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

引用自:https://unix.stackexchange.com/questions/389289