应分三层确认:先用 systemctl list-unit-files --type=service 查自启计划,再用 systemctl list-units --type=service --state=running 核对实际运行状态,最后单独检查 /etc/rc.local、cron @reboot、sysv 脚本及 java 服务日志。

要查看 Linux 中所有开机启动任务的执行状态,关键不是只看“是否启用”,而是分三层确认:是否被系统识别为自启项、是否在当前运行级别生效、以及实际进程是否正在运行。现代系统以 systemd 为主,应优先使用 systemctl 相关命令。
查哪些服务被设为开机自启
这是最基础的一层,看系统是否“计划”在启动时拉起该服务:
- systemctl list-unit-files --type=service —— 列出所有服务单元文件及其启用状态(enabled/disabled/static/masked)
- 加 --state=enabled 可只过滤已启用的服务:
systemctl list-unit-files --type=service --state=enabled - 注意:
static表示该服务不能直接启用,但可能被其他服务依赖而间接启动;masked表示已被禁用且无法启动
查哪些自启服务当前正在运行
启用 ≠ 运行。有些服务虽设为开机自启,但因依赖失败、配置错误或手动停用而未真正跑起来:
- systemctl list-units --type=service --state=running —— 查看当前活跃运行的服务
- 对比上一步结果,就能发现哪些“已启用但未运行”的异常项
- 对单个服务快速验证:
systemctl is-active servicename(输出 active 或 inactive)
查非 systemd 方式的自启任务
除了 systemd 服务,还有几类常见开机任务需单独检查:
-
/etc/rc.local:执行传统 Shell 脚本,用
cat /etc/rc.local或systemctl status rc-local看其是否启用并运行 -
cron @reboot 任务:检查 root 和各用户的定时任务:
crontab -l、sudo crontab -l,搜索@reboot关键词 -
System V init 脚本(老旧系统):运行
chkconfig --list(仅限 SysV 系统),但注意它不反映 systemd 的实际行为
查 Java JAR 或自定义程序是否真在开机运行
这类程序通常通过 systemd service 封装,所以重点查对应服务单元:
- 先定位服务名,比如
myapp.service,再运行systemctl status myapp - 关注输出中 Loaded 行的路径(如
/etc/systemd/system/myapp.service),打开它确认ExecStart=是否指向正确的 java -jar 命令 - 用
journalctl -u myapp -n 20查最近 20 行启动日志,看是否有报错(如找不到 JAR、端口冲突、权限不足等)











