最准确的方法是运行 systemctl list-unit-files --type=service --state=enabled,它直接读取 systemd 单元注册表中明确标记为“开机启用”的服务,不依赖当前是否运行、也不受其他服务拉起影响,能完整列出系统真正承诺开机自启的服务。

最准确的方法是运行 systemctl list-unit-files --type=service --state=enabled,它直接读取 systemd 单元注册表中明确标记为“开机启用”的服务,不依赖当前是否运行、也不受其他服务拉起影响,能完整列出系统真正承诺开机自启的服务。
查所有系统级开机自启服务
这条命令输出的是权威“承诺清单”,不是运行快照:
- 执行
systemctl list-unit-files --type=service --state=enabled,结果只含状态为 enabled 的.service单元 - 自动排除 static(如
systemd-journald.service)、masked 和 disabled 项 - 带
@的实例(如getty@tty1.service)会如实显示;模板本身(如getty@.service)不会出现 - 加
--no-pager可避免分页截断,适合重定向保存:systemctl list-unit-files --type=service --state=enabled --no-pager > /tmp/autostart.txt
查单个服务是否真被设为开机自启
别看 systemctl status 末尾的 “enabled; vendor preset: enabled”,那只是默认策略,可能已被覆盖:
- 用
systemctl is-enabled nginx.service,返回 enabled 才算生效 - 返回 disabled 表示本地已关闭,masked 表示被硬屏蔽,static 表示不可手动启用
- 务必带
.service后缀,否则可能误匹配(例如dbus-broker可能错配到dbus.service)
别漏掉用户级和兼容性启动项
系统级命令查不到这些,需单独检查:
- 桌面登录时自启的服务(如
gnome-keyring.service):用systemctl --user is-enabled xxx.service - GUI 用户级程序(
.desktop文件):检查~/.config/autostart/和/etc/xdg/autostart/ -
/etc/rc.local:若存在且有执行权限(chmod +x),并已启用rc-local.service,它也会在开机时执行
这些方法容易出错,不建议用于准确判断
它们要么漏项,要么混入干扰信息:
-
systemctl list-units --type=service --state=enabled:只列已加载的服务,会漏掉logrotate.service、certbot.timer这类“启用但尚未触发”的项 -
ls /etc/rc.d/rc3.d/或chkconfig --list:在 CentOS 8+、Ubuntu 20.04+、Debian 11+ 等纯 systemd 系统中,只是兼容残留,实际不控制启动行为 -
systemctl status xxx中的 Loaded 行:vendor preset 可能被本地配置覆盖,不能代表最终生效状态











