Systemd FAQ (简体中文)
From ArchWiki
常见问题
最新的已知问题,参见:TODO。
Q: 为什么控制台上会显示日志信息?
A: 请自行设置内核日志等级(loglevel)。以前,
/etc/rc.sysinit 帮我们把 dmesg 的日志等级设置为 3,是比较合适的。 内核参数中加入 loglevel=3 或 quiet 即可。Q: 如何修改启用的可登陆的 tty 控制台(getty)数量?
A: 添加新的 getty:
在 /etc/systemd/system/getty.target.wants/ 添加新的软链接即可:
# ln -sf /usr/lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty9.service # systemctl start getty@tty9.service
移除 getty:
从 /etc/systemd/system/getty.target.wants/ 删除对应的软链接即可:
# rm /etc/systemd/system/getty.target.wants/getty@tty5.service /etc/systemd/system/getty.target.wants/getty@tty6.service # systemctl stop getty@tty5.service getty@tty6.service
用户也可以通过编辑/etc/systemd/logind.conf,将NAutoVTs修改为需要的 TTY 个数。用这种方式,按需启动将会保持,而之前的方式将会在启动时就启动 TTY.
systemd 不使用 /etc/inittab 文件。
Q: 怎样输出更详细的开机信息?
A: 如果内核信息输出后就什么信息都不输出了,很可能是因为你在内核参数中添加了
quiet。删除即可,然后你就可以看到一列列绿色的 [ OK ] 和红色的 [ FAILED ]了。
所有信息都记录在系统日志,可以通过 $ systemctl 查看系统状态,通过 journalctl 查看日志。Q: 开机后控制台信息会被清空,如何避免?
A: 自己写一个 getty@tty1.service 文件
把
/usr/lib/systemd/system/getty@.service 复制到 /etc/systemd/system/getty@tty1.service,修改 TTYVTDisallocate 为 no.Q: 我不用官方内核,内核版本和编译参数有什么要注意的吗?
A: systemd 不支持 2.6.39 版本之前的内核。
这里有一些必须/推荐的编译设置,可能不全:
General setup
CONFIG_FHANDLE=y
CONFIG_AUDIT=y (recommended)
CONFIG_AUDIT_LOGINUID_IMMUTABLE=y (not required, may break sysvinit compatibility)
CONFIG_CGROUPS=y
-> Namespaces support
CONFIG_NET_NS=y (for private network)
Networking support -> Networking options
CONFIG_IPV6=[y|m] (highly recommended)
Device Drivers
-> Generic Driver Options
CONFIG_UEVENT_HELPER_PATH=""
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y (required if you don't use an initramfs)
-> Real Time Clock
CONFIG_RTC_DRV_CMOS=y (highly recommended)
File systems
CONFIG_FANOTIFY=y (required for readahead)
CONFIG_AUTOFS4_FS=[y|m]
-> Pseudo filesystems
CONFIG_TMPFS_POSIX_ACL=y (recommended, if you want to use pam_systemd.so)Q: 怎样知道一个目标需要哪些进程服务?
A: 例如,你可能想搞明白目标单元
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 cups.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。Q: 电脑关闭了但电源没有断。
A: 使用
$ systemctl poweroff而不是
systemctl halt.Q: 切换到 systemd 后,为什么 fakeRAID 没有挂载?
A: 请确保使用了
# systemctl enable dmraid.service
Q: 如何在启动的时候,运行自定义的一个脚本?
A: 在
/etc/systemd/system 中新建一个文件(名称可以为 myscript.service) 然后在其中写入如下内容:
[Unit] Description=My script [Service] ExecStart=/usr/bin/my-script [Install] WantedBy=multi-user.target
然后开启该守护进程
# systemctl enable myscript.service本例是说当目标multi-usr载入的时候,会启动你这个自定义脚本。
Q: .service 状态显示绿色的 "active (exited)" (例如 iptables)
A: 这很正常,本例中的 iptables 并不是守护进程,而是由内核控制,所以装载完规则后自动退出了。通过下面命令检查规则是否正确加载
# iptables --list
Q: Failed to issue method call: File exists 错误
A: 此错误一般发生在
systemctl enable创建系统连接到/etc/systemd/system/的时候。一般是在切换显示管理器(例如从 GDM 到 KDM)时出现,这时/etc/systemd/system/display-manager.service 已经存在。
要解决此问题,使用 systemctl -f enable 覆盖原有链接。