Linux系统下重启服务的命令会根据系统采用的初始化系统不同而有差异,常见的初始化系统有systemd、SysVinit等,对应的重启命令也有所区别,用户需要根据自己的系统版本选择合适的命令。

systemctl重启服务命令(适用于systemd系统)
目前主流的Linux发行版比如Ubuntu 16.04及以上、CentOS 7及以上、Debian 8及以上都默认使用systemd作为初始化系统,这类系统优先使用systemctl命令来管理服务。
重启服务的命令格式为:
# 重启指定服务,服务名后不需要加.service后缀也可以,系统会自动补全 sudo systemctl restart 服务名 # 示例:重启nginx服务 sudo systemctl restart nginx # 示例:重启mysql服务 sudo systemctl restart mysql
如果需要查看服务重启后的状态,可以执行以下命令确认服务是否正常运行:
sudo systemctl status 服务名
service重启服务命令(兼容systemd和旧版SysVinit)
service命令是一个兼容性较强的服务管理命令,在systemd系统和旧版的SysVinit系统上都可以使用,不过在systemd系统上,service命令本质上是systemctl的兼容封装。
重启服务的命令格式为:
# 重启指定服务 sudo service 服务名 restart # 示例:重启ssh服务 sudo service ssh restart # 示例:重启docker服务 sudo service docker restart
直接调用init.d脚本重启服务(适用于SysVinit系统)
旧版的Linux发行版比如CentOS 6、Ubuntu 14.04及更早版本采用SysVinit作为初始化系统,这类系统的服务脚本存放在/etc/init.d/目录下,可以直接执行脚本重启服务。
重启服务的命令格式为:
# 执行对应服务的脚本,传入restart参数 sudo /etc/init.d/服务名 restart # 示例:重启apache2服务 sudo /etc/init.d/apache2 restart # 示例:重启vsftpd服务 sudo /etc/init.d/vsftpd restart
不同命令的适用场景对比
可以通过以下表格快速判断不同场景下应该使用的重启命令:
| 初始化系统类型 | 推荐重启命令 | 适用发行版示例 |
|---|---|---|
| systemd | systemctl restart 服务名 | CentOS 7+、Ubuntu 16.04+、Debian 8+ |
| SysVinit | /etc/init.d/服务名 restart 或 service 服务名 restart | CentOS 6、Ubuntu 14.04及更早版本 |
| 不确定初始化系统 | 先尝试service 服务名 restart,失败再用对应系统的命令 | 所有发行版 |
重启服务的注意事项
- 重启服务需要对应的权限,普通用户执行命令时需要加上
sudo获取管理员权限,否则会提示权限不足。 - 重启服务前可以先确认服务当前的状态,避免对正在运行的关键服务做不必要的重启操作。
- 如果重启服务后服务没有正常启动,可以查看服务的日志文件排查问题,比如systemd系统的服务日志可以通过
journalctl -u 服务名查看。
如何判断当前系统使用的初始化系统
如果不确定自己的Linux系统采用的是哪种初始化系统,可以执行以下命令判断:
# 查看init进程的PID 1对应的程序,systemd系统会显示/usr/lib/systemd/systemd ps -p 1 -o comm= # 也可以检查是否存在systemctl命令,存在的话大概率使用systemd which systemctl
如果执行ps -p 1 -o comm=输出结果为systemd,说明系统使用systemd初始化系统;如果输出结果为init,则大概率是SysVinit系统。