systemctl是现代linux系统管理服务的首选工具,因其统一接口、并行启动、依赖管理和丰富状态信息等优势。1. 使用systemctl list-unit-files --type=service可查看所有服务及其开机自启动状态;2. 通过grep enabled可过滤已启用的服务;3. 使用systemctl enable/disable可管理服务的开机自启动;4. 启动、停止、重启服务分别用systemctl start/stop/restart;5. 排查服务失败时,先用systemctl status和journalctl查看日志,再检查依赖、配置文件、权限、端口冲突、资源限制、selinux/apparmor及环境变量等问题,并逐一解决。掌握这些方法能实现对服务的全面控制。

查看Linux启动服务,尤其是那些配置为开机自启动的服务,systemctl无疑是现代Linux系统(基于systemd)里最核心、最直接的工具。它能让你清晰地看到哪些服务单元文件被加载了,它们当前的状态如何,以及更重要的是,它们是否被设定为系统启动时自动运行。

要列出所有服务单元文件及其开机自启动状态,最直接的命令是:
systemctl list-unit-files --type=service
这条命令会显示一个包含服务名称、加载状态(LOAD)、活动状态(ACTIVE)、子状态(SUB)以及关键的“UNIT FILE STATE”列的列表。UNIT FILE STATE 这一列,会明确告诉你一个服务是 enabled(已启用,开机自启动)、disabled(已禁用,不开机自启动)、static(静态,通常是依赖项,不能直接启用/禁用)还是 indirect(间接启用)。

如果你只想看那些已明确配置为开机自启动的服务,可以这样过滤:
systemctl list-unit-files --type=service | grep enabled
当然,这只是查看配置。如果你想知道当前哪些服务正在运行,那是另一个维度的问题,通常用 systemctl list-units --type=service --state=running。理解这两者的区别很重要:list-unit-files 看的是“配置”,而 list-units 看的是“当前运行状态”。

在我看来,systemctl之所以成为现代Linux系统(尤其是那些采用systemd作为初始化系统的发行版,比如CentOS 7/8、Ubuntu 16.04+、Debian 8+)管理服务的首选,甚至可以说是唯一真正全面且高效的工具,原因有很多。这不像以前,我们可能还在 chkconfig 和 service 之间纠结。
systemd的设计哲学就是统一和简化。它取代了传统的SysVinit和Upstart,带来了更快的启动速度、更好的依赖管理、更强大的日志系统(journald),以及一个统一的服务管理接口——systemctl。
chkconfig 主要是针对SysVinit脚本的,它通过在/etc/rcX.d/目录下创建软链接来管理服务在不同运行级别下的启动。而 service 命令,它本质上只是一个兼容层,用来执行SysVinit脚本或Upstart作业。在systemd系统上,service 命令很多时候会被重定向到 systemctl。
相比之下,systemctl 直接操作的是systemd的单元文件(.service、.target、.mount等),这些文件定义了服务的启动方式、依赖关系、资源限制等等。它的优势在于:
systemctl 来管理,这大大降低了学习成本。systemctl 就是控制这种并行化的关键。systemctl 能确保这些依赖被正确满足。systemctl status 提供的服务状态信息远比传统工具详细,包括CGroup信息、进程ID、日志片段等,这对于排查问题非常有用。所以,如果你的Linux发行版是基于systemd的,那么花时间深入理解 systemctl 的用法,绝对是物超所值的一笔投资。
判断一个服务是否开机自启动,最准确的方法就是看它在 systemctl list-unit-files --type=service 命令输出中的 UNIT FILE STATE。
enabled: 这就意味着服务被配置为在系统启动时自动运行。它通常会在 /etc/systemd/system/multi-user.target.wants/ 或其他 .wants 目录下创建一个指向实际服务单元文件的软链接。disabled: 服务不会在系统启动时自动运行。相应的软链接通常是不存在的。static: 这类服务通常是其他服务的依赖项,或者它们本身并不直接启动,而是由其他单元文件触发。你不能直接用 systemctl enable/disable 来改变它们的状态。indirect: 这种状态表示服务是通过另一个单元文件间接启用的。管理开机自启动:
一旦你确定了服务的状态,管理起来也相当直接:
sudo systemctl enable <service_name>
这会在适当的 .wants 目录中创建软链接。
sudo systemctl disable <service_name>
这会移除相应的软链接。
实时操作服务:
除了管理开机自启动,你还需要知道如何即时控制服务:
sudo systemctl start <service_name>
sudo systemctl stop <service_name>
sudo systemctl restart <service_name>
systemctl status <service_name>
掌握这些命令,你就能对系统上的服务有完全的控制权了。但记住,修改服务状态,尤其是禁用重要的系统服务,需要非常谨慎,否则可能会导致系统不稳定甚至无法启动。
服务启动失败,这简直是家常便饭,尤其是在部署新应用或者系统升级之后。当我遇到这种情况时,通常会按照一套相对固定的思路去排查,这能大大提高效率。
第一步:查看服务状态和日志
这是最关键的第一步,也是大多数问题的突破口。
systemctl status <service_name>
这条命令会告诉你服务当前的活动状态(Active: active (running) 或 Active: failed)、加载状态,以及最近的几行日志输出。很多时候,错误信息就直接显示在这里。
如果 status 命令的日志不够详细,那就深入 journalctl:
journalctl -u <service_name>
这条命令会显示该服务的所有日志条目。你可以加上一些参数来更好地过滤:
journalctl -u <service_name> -f: 实时跟踪日志,方便观察服务启动过程中的动态输出。journalctl -u <service_name> -b: 只看当前启动会话的日志。journalctl -u <service_name> --since "1 hour ago": 查看过去一小时的日志。常见原因和排查点:
依赖问题: 服务可能依赖于另一个未启动或已失败的服务。
systemctl list-dependencies <service_name>,然后逐一检查依赖服务的状态。配置文件错误: 这是最常见的错误之一。服务本身的配置文件(例如Nginx的nginx.conf,MySQL的my.cnf)有语法错误或配置不当。
nginx -t)。另外,手动检查配置文件中的拼写、路径、权限等。sudo systemctl daemon-reload (如果修改了systemd单元文件本身) 或 sudo systemctl restart <service_name>。权限问题: 服务进程没有足够的权限去读写它需要的文件或目录。
Permission denied 字样。确认服务运行用户(通常在单元文件里定义)对相关文件和目录有读写执行权限。chmod 或 chown 调整权限。端口冲突: 如果是网络服务,它可能想监听的端口已经被其他进程占用。
sudo netstat -tulnp | grep <port_number> 或 sudo lsof -i :<port_number>。资源限制: 服务可能超出了系统或cgroup设定的资源限制(如内存、文件句柄数)。
journalctl 日志中可能会有OOM (Out Of Memory) 或其他资源限制的报错。LimitNOFILE),或增加系统资源。SELinux/AppArmor: 这些安全增强模块可能会阻止服务执行某些操作。
sudo audit2allow -a -M mymodule (SELinux) 或查看 /var/log/audit/audit.log。AppArmor日志通常在 dmesg 或 syslog 中。环境问题: 服务启动时,可能缺少某些必要的环境变量。
Environment= 或 EnvironmentFile= 配置。排查问题就像侦探工作,一步步抽丝剥茧,最终总能找到症结所在。耐心和细致,是解决这些问题的关键。
以上就是如何查看Linux启动服务 systemctl列出所有服务的详细内容,更多请关注php中文网其它相关文章!
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号