权威开机自启状态应查systemctl list-unit-files --type=service,它直接读取单元注册表,结果最可靠;单个服务用systemctl is-enabled 服务名,返回enabled/disabled/static/masked四类明确值,避免误判运行状态。

开机自启服务的权威状态,只看 systemctl list-unit-files --type=service 就够了——它直接读取 systemd 单元注册表,不依赖当前是否运行、是否加载,结果最可靠。
查所有已启用的开机自启服务(最常用)
这条命令输出的是系统“承诺开机时拉起哪些服务”的原始清单,不是当前运行的服务:
- 执行
systemctl list-unit-files --type=service | grep enabled,列出所有标记为enabled的服务 - 注意过滤掉
static:它们不能被手动启用,但可能被其他服务拉起,加个awk '$2 == "enabled"'更干净 - 别用
systemctl list-units --state=enabled——这个命令实际查的是“当前已加载且启用”的单元,会漏掉未加载但已配置自启的服务 - 如果输出为空但你知道某服务该自启,说明它根本没注册成 systemd 单元,
systemctl is-enabled xxx会报Unit xxx.service could not be found
查单个服务是否真被设为开机自启
systemctl is-enabled 是脚本和人工核查的首选,返回值明确、无歧义:
宝塔Linux面板11.8.1为官网当前正式版,新增AI建站能力并经过宝塔网站工程师深度调教,开放自定义AI功能API,同时对WAF进行界面重构和深度优化,提升拦截能力与运维效率。
- 运行
systemctl is-enabled nginx.service,返回enabled才算真正配置成功 - 返回
disabled表示没启用;static表示它本身不可独立启用(如syslog.socket);masked表示被显式禁止(符号链接指向/dev/null) - 别只看
systemctl status nginx里 “Loaded” 行末尾写的enabled——那只是状态快照,可能滞后或误判 - 如果服务名不带
.service后缀也能查,但建议写全,避免和 timer/socket 等其他单元类型混淆
为什么 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,导致启动时跳过 -
systemctl daemon-reload忘了:改完 .service 文件或新增后,必须 reload 才能让 systemd 重新扫描
禁用自启但服务还在跑?这是设计,不是 bug
systemctl disable 只删符号链接,不影响当前进程——这是 systemd 的明确行为,不是遗漏:
- 执行
sudo systemctl disable nginx后,systemctl is-enabled nginx返回disabled,但systemctl is-active nginx仍可能是active - 要同时停掉,得额外执行
sudo systemctl stop nginx;一步到位用sudo systemctl disable --now nginx - 同理,
enable不等于start,很多运维事故源于默认假设“启用=立刻跑”,结果服务卡在 failed 状态没人发现 - 检查真实状态组合用:
systemctl is-enabled xxx+systemctl is-active xxx,两个都enabled和active才算“既配了又在跑”
真正容易被忽略的是:服务是否被 masked。一旦 systemctl mask xxx,enable 会静默失败,is-enabled 显示 masked,且无法通过常规方式解除——得先 unmask。这不是小概率事件,尤其在安全加固后。










