在Linux系统中,服务的启动、停止、重启和状态管理是系统管理员日常操作的核心内容之一,不同版本的Linux发行版可能使用不同的服务管理工具,主要包括传统的System V init(SysVinit)和现代的systemd,以下将详细介绍这两类工具中常用的命令,并通过表格对比其使用方法,帮助用户高效管理服务。

System V init(SysVinit)服务管理命令
SysVinit是基于运行级别的服务管理方案,通过脚本文件控制服务的启动和停止,常见的命令包括service和chkconfig,适用于CentOS 6及更早版本、Debian 7等系统。
-
service命令
service命令用于控制当前运行级别的服务状态,基本语法为service 服务名 操作。- 启动服务:
service httpd start(启动Apache服务) - 停止服务:
service nginx stop(停止Nginx服务) - 重启服务:
service mysqld restart(重启MySQL服务) - 查看服务状态:
service sshd status(检查SSH服务状态)
service命令本质上是调用/etc/init.d/目录下的脚本文件,例如service httpd start实际执行的是/etc/init.d/httpd start。 - 启动服务:
-
chkconfig命令
chkconfig用于管理服务的开机自启状态,需配合--level参数指定运行级别(默认为所有级别)。
(图片来源网络,侵删)- 设置服务开机自启:
chkconfig httpd on - 关闭服务开机自启:
chkconfig nginx off - 查看服务开机自启状态:
chkconfig --list httpd - 仅在运行级别3和5开启自启:
chkconfig --level 35 mysqld on
- 设置服务开机自启:
systemd服务管理命令
systemd是现代Linux发行版(如Ubuntu 16.04+、CentOS 7+、Debian 8+)的默认初始化系统,采用并行启动和依赖管理机制,功能更强大,核心命令为systemctl。
-
基本操作命令
- 启动服务:
systemctl start nginx.service(可省略.service后缀) - 停止服务:
systemctl stop httpd - 重启服务:
systemctl restart sshd - 重新加载配置(不中断服务):
systemctl reload nginx - 查看服务状态:
systemctl status mysql(显示详细运行信息和日志)
- 启动服务:
-
开机自启管理
- 启用开机自启:
systemctl enable cron(创建符号链接到/etc/systemd/system/目标目录) - 禁用开机自启:
systemctl disable firewalld - 查看是否启用自启:
systemctl is-enabled vsftpd
- 启用开机自启:
-
服务状态与日志
(图片来源网络,侵删)- 查看活跃服务列表:
systemctl list-units --type=service --state=running - 查看失败的服务:
systemctl --failed - 查看服务日志:
journalctl -u docker.service(查看Docker服务的日志)
- 查看活跃服务列表:
命令对比与使用场景
以下是SysVinit和systemd命令的对比表格,方便快速查阅:
| 功能 | SysVinit命令 | systemd命令 | 说明 |
|---|---|---|---|
| 启动服务 | service 服务名 start |
systemctl start 服务名 |
两者均立即启动服务,但systemd支持并行加载 |
| 停止服务 | service 服务名 stop |
systemctl stop 服务名 |
停止运行中的服务 |
| 重启服务 | service 服务名 restart |
systemctl restart 服务名 |
先停止后启动,适用于需要完全重置的场景 |
| 重新加载配置 | 无(需手动重启) | systemctl reload 服务名 |
动态读取新配置而不中断服务(如Nginx) |
| 开机自启 | chkconfig 服务名 on |
systemctl enable 服务名 |
设置系统启动时自动加载服务 |
| 关闭开机自启 | chkconfig 服务名 off |
systemctl disable 服务名 |
禁止服务随系统启动 |
| 查看服务状态 | service 服务名 status |
systemctl status 服务名 |
显示服务是否运行及进程ID等详细信息 |
| 查看开机自启状态 | chkconfig --list 服务名 |
systemctl is-enabled 服务名 |
检查服务是否设置为开机自启 |
注意事项
- 权限问题:所有命令均需root权限或通过
sudo执行,普通用户可能遇到“Access denied”错误。 - 服务名称差异:不同发行版的服务名称可能不同,如CentOS 7中Apache服务名为
httpd,而Ubuntu中为apache2。 - 依赖管理:systemd会自动处理服务依赖关系,而SysVinit需手动检查脚本中的依赖顺序。
- 日志查看:systemd使用
journalctl统一管理日志,而SysVinit的日志通常分散在/var/log/目录或服务的日志文件中。
相关问答FAQs
Q1: 如何判断当前系统使用的是SysVinit还是systemd?
A1: 可以通过以下方法判断:
- 执行命令
ls -l /sbin/init,若结果为/lib/systemd/systemd,则使用systemd;若为/etc/init.d/rc,则为SysVinit。 - 或查看进程列表:
ps -p 1 -o comm,输出为systemd则使用systemd,输出为init则为SysVinit。
Q2: 为什么使用systemctl enable后服务仍未开机自启?
A2: 可能原因包括:
- 服务未正确安装:需确保服务对应的软件包已安装,且服务文件位于
/usr/lib/systemd/system/目录下。 - 手动修改了服务文件:若服务文件被移动或删除,需重新执行
systemctl daemon-reload重新加载配置。 - 镜像问题:在容器环境中,可能因缺少
--privileged权限导致符号链接创建失败。
