Linux如何启动和停止指定服务

Linux如何启动和停止指定服务
最新回答
寄纸筏

2020-05-20 00:29:19

在Linux系统中,使用systemctl命令可高效管理服务的启动、停止及相关操作,以下是具体方法:

  • 启动服务:使用sudo systemctl start <服务名称>。例如启动Nginx服务,命令为sudo systemctl start nginx,执行后服务会立即运行。

  • 停止服务:使用sudo systemctl stop <服务名称>。若要停止Nginx服务,输入sudo systemctl stop nginx,服务将停止运行。

  • 重启服务:通过sudo systemctl restart <服务名称>实现。此命令会先停止服务,再重新启动,适用于配置更改后需完全刷新服务状态的场景。例如修改Nginx配置后,使用sudo systemctl restart nginx使新配置生效,但会导致服务短暂中断。

  • 重载服务:使用sudo systemctl reload <服务名称>。该命令会通知服务重新加载配置文件,而不中断服务运行。例如修改Nginx虚拟主机配置后,执行sudo systemctl reload nginx,服务会在不中断现有连接的情况下加载新配置。但并非所有服务都支持此操作,若不支持,systemctl会退回到restart。

  • 查看服务状态:使用systemctl status <服务名称>。此命令可显示服务是否运行、PID、内存占用及最近几行日志等信息。例如查看Nginx状态,输入systemctl status nginx,输出会包含Active(运行状态)、Loaded(单元文件加载情况)、PID(进程ID)、Memory(内存占用)、CGroup(控制组信息)和Latest Logs(最近日志)等内容,有助于快速排查问题。

  • 设置开机自启动:使用sudo systemctl enable <服务名称>。执行后,Systemd会在/etc/systemd/system/multi-user.target.wants/目录下为服务单元文件创建符号链接,确保系统启动时自动运行服务。例如在Debian/Ubuntu系统中启用Apache服务,命令为sudo systemctl enable apache2;在CentOS/RHEL系统中,命令为sudo systemctl enable httpd。

  • 禁用开机自启动:使用sudo systemctl disable <服务名称>。该命令会移除符号链接,使服务不再随系统启动。例如禁用Nginx开机自启动,输入sudo systemctl disable nginx。

  • 查看是否启用开机启动:使用systemctl is-enabled <服务名称>。命令会返回enabled或disabled,用于确认服务是否设置为开机自启动。

  • 查看服务日志:使用sudo journalctl -u <服务名称>。例如查看Nginx的完整日志,输入sudo journalctl -u nginx。还可使用参数过滤日志,如sudo journalctl -u nginx -f实时跟踪最新日志;sudo journalctl -u nginx --since "2 hours ago"查看过去两小时内的日志;sudo journalctl -u nginx -p err只显示错误日志。

服务管理中重启和重载的区别

  • systemctl restart <服务名称>:先完全停止服务,再重新启动。会终止所有当前运行的进程,释放资源后启动新实例。优点是确保服务状态完全重置,新配置或代码改动彻底生效;缺点是服务在停止和重新启动期间不可用,会导致服务中断,不适用于高并发或高可用性要求的场景。
  • systemctl reload <服务名称>:通知服务重新加载配置文件,不停止服务运行。Systemd会向服务进程发送SIGHUP信号,服务进程在收到信号后,在不中断现有连接或任务的情况下加载新配置。优点是服务不会中断,保持高可用性;缺点是并非所有服务都支持,若服务设计不支持或修改的配置项过于底层,可能无法达到预期效果,甚至自动回退到restart。

使用建议

  • 优先尝试reload,尤其是在只修改非核心配置(如Nginx虚拟主机配置、Apache目录权限设置)且希望不影响用户体验的情况下。
  • 若发现配置未生效或服务行为不符合预期,再考虑使用restart,如对服务核心代码或依赖库升级、修改关键配置(如监听端口、数据库连接池大小)或服务出现异常需彻底重置状态时。