systemd/FAQ
FAQ
有关已知问题的最新列表,请查看上游的 TODO。
为什么我在控制台上收到日志消息?
您必须自行设置内核日志级别。历史上,/etc/rc.sysinit
为我们执行此操作并将 dmesg 的日志级别设置为 3
,这是一个相当安静的日志级别。在您的内核参数中添加 loglevel=3
或 quiet
。
如何更改 getty 的默认数量?
目前,默认情况下仅启动一个 getty。如果您切换到另一个 TTY,则将在那里启动一个 getty(套接字激活样式)。换句话说,Ctl+Alt+F2
将在 tty2 上启动一个新的 getty。
默认情况下,自动激活的 getty 数量上限为六个。因此,F7
到 F12
不会启动 getty。
如果您想更改此行为,请编辑 /etc/systemd/logind.conf
并更改 NAutoVTs
的值。如果您希望所有 Fx
键都启动一个 getty,请将 NAutoVTs
的值增加到 12
。如果您要将 journald 转发到 tty12,请将 NAutoVTs
的值增加到 11
(从而使 tty12 空闲)。
您还可以预先激活将在启动时运行的 getty。
要添加另一个预先激活的 getty,请启用并启动 getty@ttyX.service
。
要删除 getty,请禁用并停止相关的 getty@ttyX.service
。
systemd 不使用 /etc/inittab
文件。
如何在启动期间获得更详细的输出?
如果您在 initram 消息后在控制台中看不到任何输出,则表示您的内核行中包含 quiet
参数。最好删除它,至少在您第一次使用 systemd 启动时删除,以查看一切是否正常。然后,您将看到一个绿色 [ OK ]
或红色 [ FAILED ]
列表。
任何消息都记录到系统日志中,如果您想了解系统的状态,请使用 systemctl 或使用 journalctl 查看启动/系统日志。
如何避免在启动后清除控制台?
创建一个名为 /etc/systemd/system/getty@.service.d
的目录,并将 nodisallocate.conf
放在其中,以覆盖 TTYVTDisallocate
选项为 no
。
/etc/systemd/system/getty@.service.d/nodisallocate.conf
[Service] TTYVTDisallocate=no
systemd 需要哪些内核选项?
3.0 之前的内核不受支持。
如果您使用自定义内核,则需要确保已选择 systemd 的选项。
如果您要编译一个新内核以与已安装版本的 systemd 一起使用,则所需和推荐的选项列在 systemd README 文件 /usr/share/doc/systemd/README
中。
如果您准备安装新版本的 systemd 并且正在运行自定义内核,则可以在 systemd GitHub 存储库中找到该文件的最新版本。
一个单元依赖于哪些其他单元?
例如,如果您想弄清楚 multi-user.target
这样的目标拉入了哪些服务,请使用如下命令
$ systemctl show -p "Wants" multi-user.target
Wants=rc-local.service avahi-daemon.service rpcbind.service NetworkManager.service acpid.service dbus.service atd.service crond.service auditd.service ntpd.service udisks.service bluetooth.service org.cups.cupsd.service wpa_supplicant.service getty.target modem-manager.service portreserve.service abrtd.service yum-updatesd.service upowerd.service test-first.service pcscd.service rsyslog.service haldaemon.service remote-fs.target plymouth-quit.service systemd-update-utmp-runlevel.service sendmail.service lvm2-monitor.service cpuspeed.service udev-post.service mdmonitor.service iscsid.service livesys.service livesys-late.service irqbalance.service iscsi.service
除了 Wants
之外,您还可以尝试 WantedBy
、Requires
、RequiredBy
、Conflicts
、ConflictedBy
、Before
、After
,以了解各种依赖类型及其反向依赖。
我的电脑关机了,但电源仍然开着
使用 systemctl poweroff
而不是 systemctl halt
。
如何让脚本在启动过程中启动?
创建一个新文件作为 /etc/systemd/system/myscript.service
并添加以下内容
/etc/systemd/system/myscript.service
[Unit] Description=My script [Service] ExecStart=/usr/bin/my-script [Install] WantedBy=multi-user.target
此示例假定您希望在启动目标 multi-user 时启动脚本。确保脚本是可执行的。
启用 myscript.service
以在启动时启动服务。
#!/bin/sh
。不要写类似 ExecStart=/bin/sh /path/to/script.sh
的内容,因为这不起作用。服务单元活动状态为绿色“active (exited)”
对于也使用 RemainAfterExit=yes
的 oneshot 服务,这是预期的行为。有关更多信息,请参阅 systemd.service(5) § OPTIONS。以这种方式运行的 oneshot 服务的一些示例是 systemd-user-sessions.services
、nftables.service
和 iptables.service
。
Failure to enable unit due to preexisting symlink
当您尝试启用单元时,可能会遇到以下错误
Failed to enable unit: File /etc/systemd/system/symlink already exists and is a symlink to file.
当启用单元创建的 symlink
已存在于 /etc/systemd/system/
中时,可能会发生这种情况。这通常发生在从一个显示管理器切换到另一个显示管理器时(例如从 GDM 切换到 SDDM,可以使用 gdm.service
和 sddm.service
分别启用它们),并且相应的符号链接 /etc/systemd/system/display-manager.service
已经存在。
要解决此问题,请先禁用相关的显示管理器,然后再启用新的显示管理器,或者在启用新的显示管理器时使用 -f
/--force
选项来覆盖任何现有的冲突符号链接(根据 systemctl(1) § OPTIONS)。