查看Linux开机自启项最准确的命令是`systemctllist-unit-files--type=service--state=enabled`,它直接读取单元文件的启用标记,比`systemctllist-units`更可靠。检查单个服务用`systemctlis-enabled`,需注意完整服务名后缀,用户级服务要加`--user`。服务不启动常因单
Linux查看开机自启项方法
时间:2026-06-28
浏览:418
文章目录
要获取一份万无一失的 Linux 开机自启服务清单,目前最靠谱、最能还原系统真实承诺的命令是直接执行 systemctl list-unit-files --type=service --state=enabled。
为什么说它最准?因为它直接读取 systemd 单元文件的启用标记,与当前服务是否在运行、是否被其他进程临时拉起等动态因素完全无关。它唯一回答的问题是:系统到底“承诺”了哪些服务要在开机时启动。这才是硬事实。

如果你看到有人用 systemctl list-units 来回答“开机自启”问题,就要留个心眼了——这个命令只显示当前已加载的服务,那些设置成启用但还未启动的项目,比如 logrotate.service 或 certbot.timer,它完全看不到。换句话说,它会漏掉东西。
查所有真正开机自启的服务
一句话总结:systemctl list-unit-files --type=service --state=enabled 是唯一能反映系统“承诺开机时拉起哪些服务”的命令。它的输出直接来自单元注册表,不是运行时快照,比 systemctl list-units 更可信。
有几个细节容易踩坑,值得注意:
- 如果输出里带
@符号的服务,比如getty@.service,这只是一个模板,真正的启动实例会是getty@tty1.service这种具体名称。庆幸的是,--state=enabled会直接列出这些实例,无需额外操心。 - 状态为
static的服务(例如systemd-journald.service)不会出现在结果里。因为它们属于“隐式调用”——由其他单元触发,你无法手动disable它。 masked表示服务被“硬屏蔽”(单元文件的链接直接指向/dev/null),disabled则是明确关闭。这两类都不会参与开机启动。
查单个服务是否真的被设为开机自启
如果想查某个具体服务,可以用 systemctl is-enabled servicename.service。返回值只有四种可能:enabled、disabled、masked 或 generated,干净无歧义。
这里有几个要点:
- 别偷懒只看
systemctl status servicename的 "Loaded" 行,即便末尾写着enabled; vendor preset: enabled也不要直接相信。“vendor preset”只是预置值,可能被本地配置覆盖。想知道最终生效的结果,直接用is-enabled。 - 服务名一定要完整带上
.service后缀。不写后缀的话,部分系统会报错,或者更糟——返回一个让你百思不得其解的结果。比如你查dbus-broker时,它可能匹配到dbus.service,完全不是你要的目标。 - 如果查桌面环境中的用户级服务,比如
gnome-keyring.service,用systemctl --user is-enabled来查。系统的命令管不到用户这一层。
为什么 systemctl enable 之后服务还是不启动?
这种情况很常见,套用一句话:命令多半没错,错在它前面断了几环。常见原因有以下几类:
- 服务单元文件根本不存在。用
systemctl list-unit-files --type=service | grep yoursvc看看有没有输出。没有的话,先去/etc/systemd/system/yoursvc.service创建好再说。 - 单元文件语法错误。用
sudo systemd-analyze verify /etc/systemd/system/yoursvc.service跑一遍,有报错就修,否则即使enable成功,启动时也会直接挂掉。 ExecStart=要么路径写错,要么权限不足。记住:路径必须是绝对路径,并且User=指定的用户要对这个路径有执行权限。一个靠谱的调试方法是用sudo -u youruser /path/to/binary --help手动跑一遍,确认环境和路径都没问题。- 依赖没配全。比如服务依赖网络可用,只写了
After=network.target却没加Wants=network.target,结果 systemd 启动时跳过这个“建议性”依赖,直接绕过它。 - 最容易被忽略的一点:改完单元文件后,忘了跑
systemctl daemon-reload。systemd 不会自动感知文件变化,你必须主动告诉它。
另外多说一句:/etc/rc.d/ 和 chkconfig --list 这些东西,在 Ubuntu 22.04+、CentOS 8+、Debian 11+ 上基本算是淘汰品了。要么这些目录或命令根本不存在,要么只是作为兼容层留下的尸体。至于桌面环境中的用户级自启项,比如 ~/.config/autostart/ 下的 .desktop 文件,那套机制也不归 systemd 的系统服务管理管,别混为一谈。
实用工具推荐
绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
选择画质和输出格式,预览压缩前后的大小。