我有一台远程服务器,运行 Linux 5.19.0-41-generic x86_64,我试图找出它是如何启动的。
显然,它不使用 systemd :
PID 1 进程是bash。
ps -p 1 -o comm=
bash
Run Code Online (Sandbox Code Playgroud)
显然,没有 GRUB,至少 /usr/sbin 中没有,并且
grub-install --version
-bash: grub-install: command not found
Run Code Online (Sandbox Code Playgroud)
我猜想,启动时并没有使用GRUB。
看起来不是虚拟机。我检查了一些文件。它似乎在裸机上运行。但配置很小:顶部仅显示少数进程,并且在 ssh 上,如果我需要更完整的功能,系统会提示我“取消最小化”。
我倾向于认为使用了 SysV:
ls /etc/init.d
apport bluetooth hwclock.sh network-manager procps rsync udev
avahi-daemon dbus iwpmd nfs-common pulseaudio-enable-autospawn saned unattended-upgrades
binfmt-support gdm3 kmod pppd-dns rpcbind ssh x11-common
Run Code Online (Sandbox Code Playgroud)
但:
runlevel
unknown
Run Code Online (Sandbox Code Playgroud)
并且 /etc/inittab 不存在。
Q1:如何诊断是什么东西启动的?
Q2:如何重启?理想情况下,使用 systemd。
sudo reboot
System has not been booted with systemd as init system (PID 1). Can't …Run Code Online (Sandbox Code Playgroud) 失败:
# service auditd start
Starting auditd: [FAILED]
Run Code Online (Sandbox Code Playgroud)
失败:
# /etc/init.d/auditd start
Starting auditd: [FAILED]
Run Code Online (Sandbox Code Playgroud)
令人沮丧的是 - 有效:
# bash /etc/init.d/auditd start
Starting auditd: [ OK ]
Run Code Online (Sandbox Code Playgroud)
我在 bash /etc/init.d/auditd 的不同地方添加了类似 echo 1 echo 2 的东西,所以看看脚本采用的路径,但无济于事。
最终运行但失败的命令是
env -i PATH=/sbin:/usr/sbin:/bin:/usr/bin TERM=xterm /etc/init.d/auditd start
Run Code Online (Sandbox Code Playgroud)
为什么添加 bash 使它起作用?寻找故障排除的想法。
根据 Michaels 建议使用 run_init,我可以从 bash 中获得一些有意义的调试:
# run_init bash -x /etc/init.d/auditd start
[...]
+ /bin/bash -c 'ulimit -S -c 0 >/dev/null 2>&1 ; auditd '
+ '[' 6 -eq 0 ']'
+ failure 'auditd …Run Code Online (Sandbox Code Playgroud) 我已经在安装了 Upstart 的 Jessie 服务器上进行了一些测试,并将其替换为 SysV,反之亦然。
在此之后,我无法再重新启动。
root@amoo-001:~# reboot
Failed to talk to init daemon.
root@amoo-001:~# systemctl reboot
Failed to get D-Bus connection: Unknown error -1
Run Code Online (Sandbox Code Playgroud)