Linux管理员必备——Linux系统服务(daemon)与systemctl管理服务(下)

🐇明明跟你说过:个人主页

🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、系统服务的概念

2、为什么要管理系统服务

二、systemctl工具详解

1、systemctl的引入与背景

2、systemctl的基本用法 

3、systemctl与systemd的关系

三、使用systemctl管理服务 

1、服务的单元文件(Unit Files)

2、服务的依赖关系与启动顺序 


一、引言

1、系统服务的概念

Linux系统服务(或称为守护进程、后台进程)是那些在Linux系统中运行以提供某种功能或服务的程序。这些服务通常在系统启动时自动启动,并在后台持续运行,等待请求或执行预定的任务。Linux系统服务涵盖了各种各样的功能,从网络管理、文件系统维护到用户认证等。

2、为什么要管理系统服务

1. 系统稳定性和性能

  • 资源管理:通过管理系统服务,可以确保只有必要的服务在运行,从而优化系统资源使用(CPU、内存、磁盘I/O等)。这有助于提高系统的整体性能和响应速度。
  • 避免冲突:一些服务可能会相互冲突,管理这些服务可以避免因冲突导致的系统不稳定。


2. 安全性

  • 减少攻击面:关闭不必要的服务可以减少潜在的攻击面,降低被攻击的风险。
  • 定期更新和修补:通过管理和监控服务,确保及时更新和修补服务中的安全漏洞,提升系统的安全性。


3. 功能和依赖管理

  • 启用必需的功能:某些应用程序和功能依赖特定的服务运行。管理服务确保所需服务运行,从而提供必要的功能。
  • 依赖关系管理:管理服务及其依赖关系,确保服务按照正确的顺序启动和停止,避免因依赖关系处理不当导致的服务失败。


4. 系统启动和关闭管理

  • 启动速度:通过管理启动时加载的服务,可以显著减少系统启动时间。启用并行启动服务的功能(如systemd),进一步提高启动效率。
  • 顺序和优先级:确保服务按照正确的顺序启动和停止,避免因依赖关系处理不当导致的启动和关闭问题。

二、systemctl工具详解

1、systemctl的引入与背景

systemctl 是 systemd 系统和服务管理器的核心工具,广泛用于现代Linux发行版。systemd 的引入是为了解决传统 SysVinit 系统的一些局限性,并带来更高效和灵活的服务管理。

引入背景


1.  传统SysVinit的局限性

  • 启动速度慢:SysVinit 采用顺序启动服务,导致系统启动速度较慢。每个服务依次启动,等待前一个服务完成初始化。
  • 依赖关系管理困难:SysVinit 脚本之间的依赖关系不明确,可能导致服务启动顺序问题和故障。
  • 缺乏并行处理:无法并行启动服务,不能充分利用多核处理器的优势。
  • 配置复杂:服务脚本复杂且分散,管理和维护困难。


2. 需求变化

  • 现代硬件:现代硬件和大规模数据中心需要更快、更可靠的启动和管理机制。
  • 动态环境:容器化和云计算环境需要灵活、动态的服务管理。
  • 更好的日志管理:需要统一的日志管理系统,简化日志收集和分析。


systemd的引入

systemd 由Lennart Poettering 和 Kay Sievers 在2010年首次发布,旨在取代 SysVinit,并解决其局限性。systemd 是一个系统和服务管理器,提供了并行化、依赖关系管理、以及统一的日志处理等功能。

主要特性


1. 并行启动

  • 并行化:systemd 能够并行启动服务,利用多核处理器的优势,提高系统启动速度。


2. 依赖关系管理

  • 显式依赖:systemd 使用单元(unit)文件,明确定义服务之间的依赖关系,确保按正确顺序启动和停止服务。


3. 灵活性和统一管理

  • 单元文件:systemd 使用单元文件(unit files)定义服务、挂载点、设备、套接字等,提供统一的管理方式。
  • 目标(target):取代传统的运行级别,提供更灵活的系统状态定义。


4. 日志管理

  • journal:systemd 引入了 journald,提供统一、结构化的日志管理,简化日志收集和分析。


5. 激活和延迟启动

  • 按需启动:systemd 支持基于套接字和总线的激活机制,按需启动服务,节省系统资源。


systemctl的功能
systemctl 是 systemd 的命令行接口,用于管理系统和服务。它提供了广泛的命令来控制和查询系统状态。

2、systemctl的基本用法 

systemctl 是 systemd 的主要命令行工具,用于管理系统和服务。它可以启动、停止、重启服务,查看服务状态,启用或禁用服务等。

服务管理


启动服务

sudo systemctl start [service_name]


停止服务

sudo systemctl stop [service_name]


重启服务

sudo systemctl restart [service_name]


重新加载服务配置
重新加载服务配置,而不中断服务运行:

sudo systemctl reload [service_name]


查看服务状态

systemctl status [service_name]


开机启动管理
启用服务(开机自动启动)
设置服务在系统启动时自动启动:

sudo systemctl enable [service_name]


禁用服务(开机不自动启动)
取消服务在系统启动时自动启动:

sudo systemctl disable [service_name]


查看和列出服务
列出所有服务
列出所有加载的服务单元:

systemctl list-units --type=service


查看所有已启用的服务
列出所有开机启动的服务:

systemctl list-unit-files --type=service

系统管理
查看系统状态
查看系统整体状态:

systemctl status



日志管理


查看某个服务的日志:

journalctl -u [service_name]


查看系统日志
查看系统所有日志:

journalctl


其他常用命令


显示服务的依赖关系:

systemctl show -p Wants,WantedBy,Requires,RequiredBy [service_name]

3、systemctl与systemd的关系

systemctl 和 systemd 是紧密相关的:systemctl 是管理和控制 systemd 的命令行工具,而 systemd 是现代Linux系统中广泛使用的系统和服务管理器。

systemd 的概述


systemd 是一个系统和服务管理器,旨在替代传统的 SysVinit 和 Upstart。它提供了一套完整的解决方案来启动和管理系统进程和服务,具备以下特性:

  1. 并行化服务启动:提升系统启动速度。
  2. 依赖关系管理:显式定义服务之间的依赖关系,确保正确的启动顺序。
  3. 按需启动:支持基于事件(如插入USB设备或网络状态变化)启动服务。
  4. cgroups 支持:使用控制组(cgroups)限制和监控服务的资源使用。
  5. 日志管理:集成了 journald,提供统一的日志记录机制。


systemctl 的概述


systemctl 是一个命令行工具,用于与 systemd 交互,管理系统和服务。通过 systemctl,管理员可以启动、停止、重启服务,查看服务状态,配置服务开机启动等。

关系和交互


systemctl 操作 systemd 单元


在 systemd 中,服务和其他可管理对象(如挂载点、套接字等)被称为单元(unit)。每个单元都有一个单元文件,定义其行为和依赖关系。单元文件通常位于 /etc/systemd/system/ 和 /usr/lib/systemd/system/ 目录下。常见的单元类型有:

  1. 服务单元(service):如 httpd.service,定义一个服务。
  2. 挂载单元(mount):如 home.mount,定义文件系统的挂载。
  3. 套接字单元(socket):如 sshd.socket,定义套接字激活的服务。
  4. 目标单元(target):如 multi-user.target,定义系统状态或运行级别。

三、使用systemctl管理服务 

1、服务的单元文件(Unit Files)

在 systemd 中,服务和其他可管理对象被称为单元(units)。每个单元都有一个单元文件(unit file),定义其行为和依赖关系。单元文件通常位于 /etc/systemd/system/ 和 /usr/lib/systemd/system/ 目录下。单元文件使用 .service、.socket、.device 等后缀来区分不同类型的单元。

单元文件的结构

一个典型的 .service 单元文件由多个部分组成,每个部分用方括号 [] 包围。

[Unit]
Description=Example Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/example-command
Restart=on-failure
User=exampleuser

[Install]
WantedBy=multi-user.target


[Unit] 部分
[Unit] 部分包含关于单元的一般信息和依赖关系。

  • Description:简要描述单元。
  • After:定义单元启动的顺序。在 network.target 之后启动。

[Service] 部分
[Service] 部分包含服务的具体配置信息。

  • Type:定义服务进程的类型。常见类型包括:
    •  simple:默认类型,ExecStart 直接启动主进程。
    •  forking:ExecStart 启动一个父进程,该进程随后 fork 出子进程并退出,子进程成为主进程。
    •  oneshot:一次性进程,通常用于运行完成即退出的脚本。
    •  notify:服务在启动完成后发送通知信号。
    •  idle:服务将在所有任务完成后启动。
  • ExecStart:启动服务的命令或可执行文件。
  • Restart:定义服务失败后的重启策略。常见值包括 no、on-success、on-failure、on-abnormal、on-abort、always。
  • User:指定以哪个用户身份运行服务。

[Install] 部分
[Install] 部分定义单元的安装信息,主要用于 enable 和 disable 命令。

  • WantedBy:定义单元在哪些目标(target)下启用。multi-user.target 是多用户模式下的一个常见目标。

示例:

2、服务的依赖关系与启动顺序 

在 systemd 中,服务的依赖关系和启动顺序是通过单元文件(unit files)中的各种指令来管理的。systemd 使用依赖关系来确定服务的启动和停止顺序,确保所有服务按照正确的顺序运行。这种机制使得 systemd 能够高效地管理系统服务,避免了传统 SysVinit 系统中的一些常见问题,如启动顺序错误和服务冲突。

依赖关系的基本概念


依赖关系定义了服务之间的相互关系,确保在某个服务启动之前或之后,其他相关服务能够按正确的顺序启动。

  • After:定义当前服务在指定服务之后启动。
  • Before:定义当前服务在指定服务之前启动。
  • Requires:当前服务依赖于指定服务,若指定服务启动失败,当前服务也会失败。
  • Wants:当前服务希望指定服务运行,但不会因指定服务的启动失败而失败。
  • BindsTo:类似于 Requires,但如果指定服务停止或失败,当前服务也会停止。
  • PartOf:如果指定服务重启或停止,当前服务也会跟随重启或停止。

依赖关系的定义示例

示例1:After 和 Before

[Unit]
Description=My Custom Service
After=network.target
Before=nginx.service

  • After=network.target 表示 My Custom Service 在 network.target 之后启动。
  • Before=nginx.service 表示 My Custom Service 在 nginx.service 之前启动。

示例2:Requires 和 Wants

[Unit]
Description=My Dependent Service
Requires=mysql.service
Wants=redis.service

  • Requires=mysql.service 表示 My Dependent Service 依赖 mysql.service,如果 mysql.service 启动失败,My Dependent Service 也会启动失败。
  • Wants=redis.service 表示 My Dependent Service 希望 redis.service 启动,但 redis.service 启动失败不会影响 My Dependent Service。

 

 💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Linux的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!! 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明明跟你说过

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值