Linux入门笔记(系统服务)

系统为了某些功能必须要提供一些服务(无论是系统本身还是网络方面),这个服务就称为 service,但是 service 的提供总是需要程序的运行,而完成这个 service 的程序就称为:守护进程(daemon)。比如说:完成周期性计划任务服务的程序为 crond 这个就可以称为 daemon。
事实上,可以将这两者视为相同的东西,因为完成某个服务就需要一个 daemon 在后台运行,没有这个 daemon 就不会有 service,所以不需要分得太清楚

在 Linux 中,通常在服务的名称之后会加上一个 d,例如计划任务命令建立的 atcron 这两个服务,它们的程序分别取名为 atdcrond,而这个 d 就代表 daemon 的意思。

1 Systemd 的介绍

从 CentOS 7.x 以后,Red Hat 系列的发行版使用了 Systemd 这个 启动服务管理机制。它的好处有:

  • 并行处理所有服务,加速开机流程
  • 一经要求就响应的 on-demand 启动方式
  • 服务依赖性的自我检查
  • 依 daemon 功能分类。为了梳理清楚所有服务的功能,systemd 先定义所有服务为一个服务单位(unit),并将该 unit 归类到不同的服务类型(type)中,systemd 将服务单位(unit)区分为:servicesockettargetpathsnapshottimer 等多种不同的类型,其实所谓的 daemon 执行脚本即为一个服务单位(unit)
  • 将多个 daemon 集合称为一个群组,systemd 将许多功能集合称为一个所谓的 target 项目,这个相思木主要在设计操作环境的创建,即执行某个 target 就是执行多个 daemon 的意思
  • 向下兼容旧有的 init 服务脚本

systemd 的配置文件都放置在下面的目录中:

  • /usr/lib/systemd/system/:每个服务主要启动的脚本设置
  • /run/systemd/system/:系统执行过程中所产生的服务脚本,这些脚本的优先级比 /usr/lib/systemd/system/ 的要高
  • /etc/systemd/system:管理员根据主机系统的需求所建立的执行脚本,这些脚本的优先级比 /run/systemd/system/ 的要高

以下是几种常见的 systemd 的服务类型:

  • .service:一般服务类型,主要是系统服务,包括服务器本身所需要的本地服务以及网络服务等,是最常用的类型
  • .soceket:内部程序数据交换的 socket 服务
  • .target:执行环境类型,其实就是一群 unit 的集合
  • .mount / .automount:文件系统挂载相关的服务,如来自网络的自动挂载,NFS 文件系统挂载等与文件系统相关性较高的进程管理
  • .path:检测特定文件或目录类型
  • .timer:循环执行的服务

2 通过 systemctl 管理服务

基本上,systemd 这个启动服务的机制,主要是通过一个名为 systemctl 的命令来完成。

2.1 管理单一服务的启动、开机启动与查看状态

一般来讲,服务的启动有两个阶段,一个是开机的时候设置要不要启动这个服务,以及现在要不要启动这个服务。
其语法:

systemctl [command] [unit]

command 主要有:

  • start:立刻启动后面紧接的 unit
  • stop:立刻关闭后面紧接的 unit
  • restart:立刻重启后面紧接的 unit,即先 stopstart
  • reload:不关闭后面紧接的 unit 的情况下,重新加载配置文件,让配置生效
  • enable:设置下次开机时,后面的 unit 也被启动
  • disable:设置下次开机时,后面的 unit 不会被启动
  • status:输出目前后面紧接的 unit 的状态
  • is-active:目前有没有正在执行中
  • is-enable:开机时有没有默认要启动该 unit

使用 status 时,会输出以下信息:
在这里插入图片描述
其中重点在第二、三行:
Loaded:表示开机的时候这个 unit 是否会自启动

  • enabled:为开机启动
  • disabled:开机不启动
  • static:开机不启动,不过可以被其它开机启动的服务唤醒
  • mask:无论如何开机都不启动

Active:表示这个 unit 的状态:

  • active(running):正有一个或多个进程正在系统中运行
  • active(exited):仅执行一次就正常结束的服务,目前并没有任何进程在系统中执行
  • active(waiting):正在运行中,不过还需要等待其它的时间发生才能继续进行
  • inactive:这个服务目前没有进行

一般来说,不应该使用 kill 的方式来关闭一个正常地服务,因为使用 kill 的方式关闭服务的时候,systemctl 会无法继续监控该服务

2.2 通过 systemctl 查看系统上所有的服务

查看系统上有多少服务存在,就需要使用 list-untislist-unit-files 来查看,语法如下:

systemctl [command] [--type=TYPE] [--all]

其中 command 有:

  • list-units:依据 unit 显示目前有启动的 unit,若加上 --all 才会列出没有启动的
  • list-units-files:依据 /usr/lin/system/ 内的文件,将所有文件列表说明

--type=TYPE 就是之前提到的 unit 类型,信息输出如下图:
在这里插入图片描述
其中:

  • UNIT:项目的名称,后缀名为类型
  • LOAD:开机时是否被加载,
  • ACTIVE:目前的状态
  • DESCRIPTION:描述

2.3 通过 systemctl 管理不同的操作环境

通过上面的命令可以查询到与操作界面有关的 target 项目,在 CentOS 7.1 的默认情况下,有 26 个target unit,而跟操作界面相关性比较高的 target 主要有下面几个:

  • graphical.target命令加上图形界面
  • multi-user.target纯命令行模式
  • rescue.target:在无法使用 root 登录的情况下,systemd 在启动是会多加一个额外的临时系统,与原本的系统无关
  • emergency.target:紧急处理系统的错误,在无法使用 rescue.target 的时候,可以尝试该模式
  • shutdown.target:就是关机的模式
  • getty.target:可设置你需要几个 tty 之类的操作

对于 target 的操作的语法如下:

systemctl [command] [unit.target]

其中 command

  • get-default:取得目前的 target
  • set-default:设置后面接的 target 成为默认的操作系统
  • isolate:切换到后面接的模式

2.4 通过 systemctl 分析各服务之间的依赖性

比方说 graphical.target 的启动会依赖到 multi-user.target,那么如何追踪某个 unit 的依赖性。

systemctl list-dependencies [unit] [--reverse]

选项与参数:

  • --reverse:反向追踪谁使用这个 unit 的意思
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值