管理 Linux 服务

管理服务是 Linux 系统管理员的核心职责。服务(也称为守护进程)是系统启动时启动并持续运行的后台进程,提供 Web 托管、数据库管理和网络等基本功能。本指南介绍使用传统init 系统和现代 systemd 服务管理器管理 Linux 服务的基本命令和技巧。

了解 Linux 服务

什么是服务?

在 Linux 中,服务(或守护进程)是在后台运行的程序,通常在系统启动时启动,无需用户直接交互即可运行。常见示例包括:

Apache 或 Nginx:处理 HTTP 请求的 Web 服务器。
MySQL 或 PostgreSQL:管理数据存储和检索的数据库服务器。
SSH:允许远程访问系统的安全 shell 服务。
Cron:在指定时间运行任务的作业调度程序。
服务管理器:Init 与 Systemd
传统上,Linux 系统使用 SysVinit 系统来管理服务,启动脚本位于。然而,现代 Linux 发行版已广泛采用 systemd,这是一个更先进、更灵活的服务管理器,可提供增强的服务管理/etc/init.d/功能。

使用 Systemd 管理服务

Systemd 是大多数现代 Linux 发行版(包括 Ubuntu、Fedora 和 CentOS)的默认服务管理器。它提供了用于启动、停止和管理服务的强大工具。

启动和停止服务
要使用 systemd 启动服务,请使用以下systemctl start命令:

1
sudo systemctl start nginx

要停止正在运行的服务,请使用以下systemctl stop命令:

1
sudo systemctl stop nginx

重启并重新加载服务
如果需要重新启动服务(停止然后重新启动),请使用:

1
sudo systemctl restart nginx

某些服务支持在不停止服务的情况下重新加载其配置。要重新加载服务的配置,请使用:

1
sudo systemctl reload nginx

启用和禁用服务
要使服务在启动时自动启动,请使用以下systemctl enable命令:

1
sudo systemctl enable nginx

要防止服务在启动时启动,请使用以下systemctl disable命令:

1
sudo systemctl disable nginx

检查服务状态
要检查服务的当前状态,请使用以下systemctl status命令:

1
sudo systemctl status nginx

此命令提供有关服务的详细信息,包括其当前状态、是否处于活动状态或非活动状态以及最近的日志条目。

列出所有服务
要列出由 systemd 管理的所有服务,请使用以下systemctl list-units命令:

1
systemctl list-units --type=service

此命令显示所有已加载的服务及其状态的列表。

使用 SysVinit 管理服务
在使用 SysVinit 的较旧或更简约的 Linux 发行版中,服务是使用位于 中的脚本进行管理的/etc/init.d/。这些脚本负责处理服务的启动、停止和重启。

启动和停止服务
要使用 SysV init 启动服务,通常需要运行:

1
sudo /etc/init.d/nginx start

要停止服务:

1
sudo /etc/init.d/nginx stop

重启服务
要使用 SysVinit 重新启动服务:

1
sudo /etc/init.d/nginx restart

在启动时启用和禁用服务
SysVinit 使用运行级别来确定哪些服务应在系统启动时启动。您可以使用该update-rc.d命令在特定运行级别启用或禁用服务。

要在启动时启用服务:

1
sudo update-rc.d nginx defaults

要禁用服务在启动时启动:

1
sudo update-rc.d -f nginx remove

管理服务的最佳实践

监控服务状态
定期检查关键服务的状态,确保它们按预期运行。使用systemctl、等监控工具journalctl或第三方监控解决方案,在服务出现故障时接收警报。

自动化服务管理
对于需要跨多台服务器管理多项服务的环境,可以考虑使用 Ansible、Puppet 或 Chef 等自动化工具。这些工具可以自动部署和管理服务,确保一致性并减少手动工作量。

安全注意事项
限制服务访问:通过将服务访问限制到特定 IP 地址或使用防火墙来限制对服务的访问。
以最小权限运行服务:确保服务以必要的最小权限运行,以减少潜在安全漏洞的影响。
保持服务更新:定期更新服务以修补安全漏洞并提高性能。
日志记录和故障排除
定期检查日志:与 systemd 一起使用或检查SysVinit 管理服务的journalctl日志文件以解决问题。/var/log/
启用详细日志记录:对于关键服务,启用详细日志记录以捕获更多信息,这在诊断问题时很有用。