最准的开机自启判定依据是systemctl list-unit-files --type=service,因其直接读取systemd单元文件的启用标记,不依赖当前运行状态或历史残留链接;而list-units仅显示已加载服务,且其--state参数不识别enabled等配置态,无法准确反映开机自启设置。

直接看 systemctl list-unit-files --type=service,这是最准的开机自启判定依据,不依赖当前运行状态,也不受历史残留符号链接干扰。
为什么不用 systemctl list-units --type=service 查自启?
这个命令只显示当前已加载的服务(比如正在运行、已失败、已退出的),但很多服务根本没被加载过——比如 logrotate.service 或 certbot.timer,它们只在定时触发时才短暂存在。用它查“自启”,漏掉一大半;加 --state=enabled 也无效,因为 list-units 的 --state 参数只接受 active/inactive/failed 等运行时状态,不识别 enabled 这类配置态。
systemctl list-unit-files --type=service 怎么过滤出真正要管的服务?
原始输出里混着 static、disabled、masked 和 enabled,但 static 表示该服务不能单独启用(如 dbus-broker.service),masked 是被强制禁用(符号链接指向 /dev/null),你真正该关注的是明确标记为 enabled 的项:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 只看启用项:
systemctl list-unit-files --type=service | awk '$2 == "enabled" {print $1}' - 排除
static干扰(避免把依赖型服务误当自启):systemctl list-unit-files --type=service | awk '$2 == "enabled" && $3 != "static" {print $1}' - 想确认某个服务是否真在自启列表里:
systemctl is-enabled nginx.service—— 返回enabled才算数,static或disabled都不算
别碰 /etc/rc.d/rc*.d 和 chkconfig 除非你确定是 SysVinit 系统
CentOS 7.9、Ubuntu 18.04+、Debian 9+ 等主流发行版早已切换到 systemd,/etc/rc.d/rc3.d/ 下那些 Sxx* 符号链接只是兼容层残留,systemd 根本不读它们;chkconfig --list 在这些系统上要么报错,要么返回空或过时信息。唯一需要检查这些路径的场景是:你接手了一台没升级过的 CentOS 6 或更老机器,且明确知道它没启用 systemd 兼容模式。
真正容易被忽略的点是:一个服务显示 enabled,不代表它下次开机就一定能成功启动——配置错误、依赖缺失、磁盘满、SELinux 拒绝等都会导致启动失败,而 list-unit-files 完全不反映这些。要验证实际效果,得结合 journalctl -u 服务名 -b 看最近一次启动日志。

















