服务(service)和守护进程(daemon)

22 篇文章 0 订阅

概述

service:服务,通常指系统在后台运行的并提供某种功能或服务的软件程序或者功能模块。达成某种服务通常需要一个守护进程在后台运行。

daemon:守护进程,守护进程常常用于描述在系统后台运行的一种进程形式。

stand alone: 是独立运行的、不依赖其他系统或组件的应用程序或系统。

什么是service?

service就是服务。
简单的说,系统为了某些功能必须要提供一些服务 (不论是系统本身还是网络方面),这个服务就称为 service

在计算机领域中,服务通常指的是在后台运行并提供某种功能或服务的软件程序或功能模块。服务可以是系统级的,也可以是应用级的。

系统级的服务,如操作系统服务等。
应用级的服务,如Web服务器、数据库服务等。

服务通常会持续运行着,等待外部请求,并根据请求提供相应的服务或功能。

什么是daemon?

daemon就是守护进程。

守护进程是在计算机操作系统中在后台运行的一种特殊进程。它通常在系统启动时启动,并持续运行,守护进程通常不和用户直接交互,它们通常负责执行系统任务或提供服务。
守护进程通常以无人值守的方式运行,并能够在系统启动时自动启动。
守护进程(daemon)通常负责启动服务(service)。

服务和守护进程之间的联系和区别

  • 在一些情况下,服务和守护进程可能有重叠的部分。例如,服务通常在后台运行并提供服务,这些服务可能以守护进程的形式存在。一些服务本身就是以守护进程的形式运行的。
  • 守护进程是更一般性的概念,它可以是系统级的、应用级的或其他形式的进程。而服务通常指的是提供某种特定功能或服务的进程或模块。
  • 服务通常用于描述提供特定服务功能的后台进程,而守护进程常常用于描述在系统后台运行的一种进程形式。

总的来说,服务和守护进程是计算机系统中的两种不同的概念,它们有一些交集和区别,但都是在后台运行并提供某种特定功能或服务的系统组件。

守护进程(daemon)

守护进程以启动和管理方式来区分

以启动和管理方式来区分,守护进程(daemon)分为可以独立启动服务的守护进程(stand alone),和需要通过超级守护进程统一管理启动服务的守护进程(super daemon
其中

stand_alone:此 daemon (独立守护进程)可以自行单独启动服务

就字面上的意思来说,stand alone 就是『独立的启动』的意思。这种类型的 daemon 可以自行启动而不必透过其他机制的管理; daemon 启动并加载到内存后就一直占用内存与系统资源。

最大的优点就是:因为是一直存在内存内持续的提供服务, 因此对于发生客户端的要求时,stand alone 的 daemon 响应速度较快。常见的 stand alone daemon WWW 的 daemon (httpd)FTP 的 daemon (vsftpd) 等等。

这种类型的守护进程是由操作系统启动的,通常在系统引导过程中启动,并在整个系统运行期间保持运行。这些守护进程通常由系统管理器(如systemd、init等)自动管理。

super daemon: 一个特殊的 daemon (超级守护进程)来统一管理

这种服务的启动方式则是由一个统一的 daemon(守护进程) 来负责唤起服务。这个特殊的 daemon 就被称为 super daemon(超级守护进程)Super daemon是常驻在内存中的。

当没有客户端的要求时,各项服务都是未启动的情况,等到有来自客户端的要求时, super daemon 才唤醒相对应的服务。当客户端的要求结束后,被唤醒的这个服务也会关闭并释放系统资源。

这种机制的好处是:

  1. 由于 super daemon 负责唤醒各项服务,因此 super daemon 可以具有安全控管的机制,就是类似网络防火墙的功能
  2. 由于服务在客户端的联机结束后就关闭,因此不会一直占用系统资源。

但是缺点是什么呢?

  1. 因为有客户端的联机才会唤醒该服务,而该服务加载到内存的时间需要考虑进去,因此服务的反应时间会比较慢。常见的 super daemon 所管理的服务例如 telnet 。
  2. 这种类型的守护进程是在需要时按需启动的,通常用于处理特定的请求或事件。当有请求到达时,该守护进程会被动态地启动来处理请求,并在请求处理完毕后自动关闭。

总结一下:

区别:

  1. stand alone类型的daemon,可以自行启动,且不需要依赖其他机制,且启动并加载到内存后就一直占用内存与系统资源,因此,对于发生客户端的要求时,stand alone 的 daemon 响应速度较快。该类型服务一直存在内存中。
  2. super daemon 类型的daemon,只有当有来自客户端的要求时, super daemon 才唤醒相对应的服务,需要将该服务加载到内存,因此,服务的反应时间会比较慢一些。当客户端的要求结束后,被唤醒的这个服务也会关闭并释放系统资源,不会一直占用系统资源。但是Super daemon 是常驻在内存中的。

在 Linux 系统里面,这两种 daemon 的启动方式可以同时存在!也就是说,某些服务可以使用 stand alone 来启动,而有些其他的服务则可以使用 super daemon 来管理。
针对这种由 super daemon 管理的处理模式有两种,分别如下:

  • multi-threaded (多重线程):
    一个服务同时会负责好几个程序。
  • single-threaded (单个线程):
    一个服务一次只负责一个程序;一个需求一个需求的处理,需要等待和排队。
    在这里插入图片描述

守护进程以daemon 工作形态的类型来区分

以 daemon 提供服务的的工作状态来区分,又可以将 daemon 分为两大类,分别是:

  • signal-control
    这种 daemon 是透过信号来管理的,只要有任何客户端的需求进来,就会立即启动去处理,例如打印机的服务 (cupsd)。
  • interval-control
    这种 daemon 则主要是『每隔一段时间就主动的去运行某项工作』,需要在配置文件指定服务要进行的时间与工作, 该服务在指定的时间才会去完成工作。atd 与 crond 就属于这种类型的 daemon (每分钟侦测一次配置文件)

daemon 的命名规则

这些服务的名称被创建之后,被挂上 Linux 使用时,通常在服务的名称之后会加上一个 d ,例如例行性命令的创建的 at, 与 cron 这两个服务, 他的程序文件名会被取为 atd 与 crond,这个 d 代表的就是 daemon 的意思。所以,使用了 ps 和 top 来观察程序时,都会发现到很多的 {xxx}d 的程序,通常那就是一些 daemon 的程序

比如:在这里插入图片描述
Systemd 守护进程:Systemd 是一个守护进程管理器,负责管理 Linux 系统中的守护进程。Systemd 可以监控、启动、停止、重启甚至恢复守护进程,并提供更复杂的系统初始化和管理功能。

daemon 的启动脚本与启动方式

提供某个服务的 daemon 虽然只是一个程序而已,但是这个 daemon 的启动还是需要可执行文件、配置文件、运行环境等等。
此外,为了方便管理, 所以通常Linux发行版都会在 /var/run/ 这个目录下记录每一个守护进程( daemon) 启动服务后所取得程序的 PID , 在启动这些服务之前,可能也要自行配置一下运行环境,使得 daemon 能够顺利运行在正确的环境。要启动一个服务(即启动该服务的守护进程daemon )考虑的事情很多,并非单纯运行一个程序。
为了解决上面谈到的问题,通常 Linux发行版 会给一个简单的 shell script 来实现启动一个服务。 这个启动脚本可以进行环境的侦测、配置文件的分析、PID 文件的放置等,只需要执行这个脚本就能够顺利且简单的启动这个 daemon 。

Systemd

Systemd 是一个先进的系统管理守护程序,用于启动、停止、管理和监控系统服务。它取代了之前的 init 系统,提供更强大和灵活的服务管理功能。

在 Ubuntu 18.04 及其他现代 Linux 发行版中,虽然 Systemd 已经成为主流的系统和服务管理守护程序,但 init 系统仍然存在,并且在一些系统中仍在使用。

在 Ubuntu 18.04 中,Systemd 负责系统初始化,以及启动和管理系统中的各种服务和进程。用户可以使用 Systemd 命令来控制和管理服务的运行状态,例如启动服务、停止服务、重启服务等。通过 Systemd,用户可以更方便地管理系统服务,并监控服务的运行状态。

Systemd 在设计上可以兼容传统的 init 系统,因此在某些情况下,init 仍被维持或部分使用。 在传统的 Linux 系统中,init 是主要的系统初始化和服务管理守护程序(提供sysvinit 或 Upstart)。然而,随着 Systemd 的引入,许多发行版(包括 Ubuntu)逐渐转向使用 Systemd 作为主要系统和服务管理守护程序。

Systemd 提供了更多功能和特性,如并行启动服务、高级的依赖关系管理、前瞻性启动和控制等。 虽然 Systemd 可以兼容传统的 init 系统脚本,但它带来了更加现代化和强大的服务管理和初始化功能。因此,大多数现代 Linux 发行版选择使用 Systemd 代替传统的 init 系统。但在某些特殊情况下,仍有部分系统或用户继续选择使用 init 系统。

服务和守护进程在 Ubuntu 18.04 系统中的配置文件和相关目录通常位于以下位置:

  1. /etc/init.d/:这个目录包含系统服务的启动脚本。在这里可以找到各种服务的启动脚本,用于启动、停止和管理系统服务。 这些脚本遵循特定的语法和命令,可以启动、停止、重启服务等。
  2. /etc/systemd/system/:Systemd 单元文件(unit files)存放的位置。Systemd 是 Ubuntu 18.04 中使用的服务管理器,守护进程通过单元文件来定义。在这个目录中,可以找到服务的 unit 文件,定义了该服务如何被 Systemd 管理。 Systemd 单元文件存放的位置,通过这些单元文件定义了服务的启动配置、依赖关系、执行命令等。
  3. **/etc/systemd/system/.wants/:在这个目录中,包含了要在系统启动时自动启用(enable)的 Systemd 服务单元文件的符号链接。这些符号链接会指向 /etc/systemd/system/ 目录下的实际服务单元文件。

需要注意的是,Systemd 已经成为主流的服务管理守护程序,因此在 Ubuntu 18.04 系统中更多地使用 Systemd 来管理服务和守护进程。在 Systemd 中,服务的配置文件和管理基本上都是通过 unit 文件进行定义和控制。 systemd 的配置十分灵活,允许管理员对服务进程进行更精细的管理和控制。

术语解释

Stand alone

“Stand alone” 是一个英文术语,指的是独立运行的、不依赖其他系统或组件的应用程序或系统。
在计算机领域中,“stand alone” 应用程序是指可以单独运行在计算机系统上,不需要依赖其他外部服务或组件。
特点和概念:

  • Stand alone 应用程序通常包含了所有需要的运行环境和依赖,用户可以直接安装、运行而无需安装其他额外的软件或组件。
  • 这类应用程序通常独立运行,不需要与其他应用程序或服务进行交互或通信,可以在没有网络连接的环境下独立运行。
  • Stand alone 应用程序通常具有较高的灵活性和可移植性,因为它们不依赖于外部组件或服务。
  • 通常情况下,Stand alone 应用程序只需要用户单独运行即可完成其功能,而不需要其他应用程序或服务的支持。

超级守护进程(super daemon)

超级守护进程(super daemon)是一种特殊的守护进程,也被称为 “superserver”。它是一种设计模式,用于管理和协调其他服务和网络连接请求。 超级守护进程通常是一个高级别的守护进程,通常是以有较高权限的特权用户或系统管理员权限来运行。它负责监听系统上的各种网络服务请求,并将这些请求分派给相应的服务进程。通过使用超级守护进程,可以集中管理和容易扩展系统上的多个网络服务。

一个常见的超级守护进程是inetd(Internet服务进程守护程序),它负责监听并处理TCP和UDP连接请求,然后将这些请求转发给相应的服务进程处理。超级守护进程的设计可以减少系统资源的占用和提高整个系统的效率,同时简化了网络服务的管理和配置。

/etc/init.d/syslog

/etc/init.d/syslog 是一个系统服务的启动脚本,通常用于启动、停止和管理系统日志服务。在一些Linux发行版中,系统日志服务通常是通过 syslog 守护进程来处理系统日志的记录和管理。

在这个启动脚本中,主要包含了一些用于控制系统日志服务的操作,例如启动、停止、重启等。通过运行这个脚本,可以方便地对系统日志服务进行管理。

以下是一个简单的示例,展示了可能在 /etc/init.d/syslog 脚本中包含的功能和用法:

  • start:启动系统日志服务
  • stop:停止系统日志服务
  • restart:重启系统日志服务
  • status:查看系统日志服务的状态信息

启动脚本通常使用类似 case…esac 的结构来根据命令参数执行不同的操作。它们是 Shell 脚本,用于启动和控制系统服务,确保系统服务能够正常运行。

总的来说,/etc/init.d/syslog 是一个系统服务的启动脚本,用于管理系统日志服务的启动和停止,以及对系统日志服务进行管理和控制。

/etc/services

服务和端口的对应关系的配置文件
在这里插入图片描述

第一栏为 daemon 的名称、第二栏为该 daemon 所使用的端口号与网络数据封包协议, 封包协议主要为可靠联机的 TCP 封包以及较快速但为非面向连接的 UDP 封包。

举个例子说,那个远程联机机制使用的是 ssh 这个服务,而这个服务的使用的端口号为 22 。
客户端通过IP连接主机,主机通过端口号来分辨不同的服务需求。

为了统一因特网端口号对应服务的功能,好让所有的主机都能够使用相同的机制来提供服务与要求服务, 所以就有了『通讯协议』。也就是说,有些约定俗成的服务都放置在同一个端口号上面,举例来说, 网址列上面的 http 会让浏览器向 WWW 服务器的 80 端口号进行联机;而 WWW 服务器也会将 httpd 这个软件激活在 port 80, 这样两者才能够达成联机!
注意:
虽然可以通过修改/etc/services这个文件来修改服务对应的端口号,但是不建议这样做,因为可能会造成一些协议的错误情况。因为约定俗成。

参考(重要,建议认真阅读)

第十八章、认识系统服务 (daemons) 由于编写时间比较早,有很多内容未及时更新,但仍然有很好的参考价值。
《一篇搞懂》系列之三——systemd 本文介绍了init daemon的相关定义,以及两套init daemon架构,即Init架构以及systemd架构;建议认真阅读
Systemd 服务管理

  • 27
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值