Linux 系统服务和守护进程

云淡#风清 / 2023-08-07 / 原文

Linux系统中,服务和守护进程是后台运行的程序,用于提供特定的功能和服务。它们在系统启动时自动启动,并在后台持续运行,不需要用户交互。

  1. 系统服务: 系统服务是在系统启动时自动启动的后台程序,它们负责提供一些核心功能,如网络服务、文件系统管理、日志记录等。这些服务通常由操作系统或系统管理员配置和管理。

    一些常见的系统服务包括:

    • 网络服务:如SSH(远程登录)、HTTP服务器(如Apache)、DNS服务器(如BIND)等。
    • 日志服务:如Syslog,用于记录系统和应用程序的日志信息。
    • 文件系统服务:如NFS(网络文件系统),允许在不同主机之间共享文件。
    • 时间同步服务:如NTP(网络时间协议),用于同步系统时间。
  2. 守护进程: 守护进程是在后台运行的长期运行程序,通常不受用户登录或注销的影响。它们持续运行,提供特定的服务或功能,如监控、定时任务、资源管理等。

    一些常见的守护进程包括:

    • cron:用于执行预定的定时任务,比如备份、清理等。
    • syslogd:负责收集和记录系统日志。
    • sshd:SSH守护进程,允许远程登录和操作。
    • httpd:Web服务器守护进程,用于提供网站和应用程序服务。
    • mysqld:MySQL数据库守护进程,提供数据库服务。
  1. 初始化系统: 初始化系统是在Linux系统启动时负责初始化系统环境和启动各种服务和守护进程的程序。常见的初始化系统有Systemd和SysVinit。

    • Systemd:现代Linux发行版中广泛使用的初始化系统,它提供了更快的启动速度和更多的功能,可以并行启动和管理服务。
    • SysVinit:传统的初始化系统,在一些老的Linux发行版中仍然使用。它使用脚本来控制启动和停止服务。
  2. 服务管理命令: 在Linux中,你可以使用一些命令来管理系统服务和守护进程:

    • 启动服务:systemctl start service_name(Systemd)或 /etc/init.d/service_name start(SysVinit)。
    • 停止服务:systemctl stop service_name(Systemd)或 /etc/init.d/service_name stop(SysVinit)。
    • 重启服务:systemctl restart service_name(Systemd)或 /etc/init.d/service_name restart(SysVinit)。
    • 查看服务状态:systemctl status service_name(Systemd)或 /etc/init.d/service_name status(SysVinit)。
  3. 服务配置文件: 系统服务和守护进程的配置文件通常位于/etc目录下,以服务的名称命名,后缀可能是.conf或其他。通过编辑这些配置文件,可以调整服务的参数和行为。

  4. 自启动配置: 如果想要某个服务在系统启动时自动启动,你需要将它添加到自启动配置中。在Systemd中,可以使用systemctl enable service_name命令来实现;在SysVinit中,可以使用update-rc.d service_name defaults命令。

  5. 日志记录: 系统服务和守护进程通常会生成日志,以便跟踪和诊断问题。日志文件通常位于/var/log目录下,你可以使用工具如tailcat来查看日志内容。

  6. 服务单元文件(Unit Files): 在Systemd中,每个服务都有一个对应的服务单元文件,用于定义服务的行为和属性。这些文件通常存储在/etc/systemd/system目录下,以.service为后缀。通过编辑这些文件,你可以指定服务的启动命令、依赖关系、环境变量等。

  7. 守护进程和无终端会话: 守护进程通常是在后台运行的,它们不关联于任何终端会话。这意味着它们不受用户登录和注销的影响,持续地运行。守护进程通常会自动重启以应对异常终止。

  8. 孤儿进程和僵尸进程: 当一个父进程退出而子进程还在运行时,子进程就成为孤儿进程,系统会将其托付给init进程(通常是PID为1的进程)继续管理。而僵尸进程是已经终止但其父进程尚未对其进行处理(调用wait()waitpid())的进程。这些进程会占用系统资源,所以及时处理是重要的。

  9. 启动级别和运行级别: 在一些旧的Linux发行版中,系统的运行状态由不同的运行级别(runlevel)定义。不同的运行级别可以启动不同的服务和守护进程。然而,现代Linux发行版大多使用Systemd,它不再采用传统的运行级别概念,而是通过目标单元(target units)来管理服务的启动和停止。

  10. 守护进程的控制和管理: 系统管理员可以使用systemctl命令来控制和管理Systemd管理的守护进程。例如:

启动守护进程:systemctl start service_name

停止守护进程:systemctl stop service_name

重启守护进程:systemctl restart service_name

查看守护进程状态:systemctl status service_name

查看所有已启动的守护进程:systemctl list-units --type=service

  1. 守护进程的日志管理: 守护进程通常会生成日志以记录其活动和状态。系统管理员可以使用工具来管理和查看这些日志,例如:

    • journalctl:Systemd日志管理工具,用于查看和分析系统日志。
    • tailcat:常用的命令用于查看日志文件的末尾或全部内容。
    • grep:用于搜索日志中的特定关键字或模式。
  2. 监控和性能优化: 监控系统服务和守护进程的性能和健康状态对于系统管理员至关重要。一些工具可以帮助你实现监控和性能优化:

    • tophtop:实时查看系统资源使用情况,包括CPU、内存、进程等。
    • iotop:监视磁盘I/O使用情况。
    • netstatss:查看网络连接和端口使用情况。
    • vmstat:报告系统的虚拟内存统计信息。
    • sar:系统性能分析工具,可以收集和报告系统资源使用情况。
  3. 自定义守护进程和服务: 在需要的情况下,系统管理员可以自定义自己的守护进程和服务,以满足特定的需求。为此,你需要创建相应的配置文件、守护进程脚本和启动脚本,并在系统中注册它们。

  4. 容器化和虚拟化: 随着容器化和虚拟化的兴起,许多服务和守护进程现在以容器或虚拟机的形式运行。这提供了更好的资源隔离和管理,使得部署和扩展变得更加灵活。

  5. 安全性和权限: 针对系统服务和守护进程,要确保合适的安全措施。例如,使用适当的用户和组来运行服务,限制服务的访问权限,定期更新和维护服务等。