neilChenXie / neilChenXie.github.io

Blog, include Management, Apps, Linux, Java, BigData, Everything ^_^
1 stars 0 forks source link

service, systemd & systemctl #40

Closed neilChenXie closed 7 years ago

neilChenXie commented 7 years ago
neilChenXie commented 7 years ago

systemctl

neilChenXie commented 7 years ago

systemd实用工具

image

systemd内核

image

systemd守护进程

image

systemd目标

image

neilChenXie commented 7 years ago

systemd对象类型

image

状态输出中表示服务状态的关键字

image

Linux shutdown

image

neilChenXie commented 7 years ago

graphic 示例

image

neilChenXie commented 7 years ago

init

Linux 操作系统的启动首先从 BIOS 开始,接下来进入 boot loader,由 bootloader 载入内核,进行内核初始化。内核初始化的最后一步就是启动 pid 为 1 的 init 进程。这个进程是系统的第一个进程。它负责产生其他所有用户进程。

在红帽企业版Linux 7版本以前的系统中,init是不可或缺的进程之一。所谓init进程,是一个由内核启动的用户级进程,其ID进程编号始终是1。这一进程负责激活系统中的其他服务,较为常用的守护进程在系统启动时通过shell脚本启动,而不常用的守护进程由其他服务根据需要来启动。因此,许多年来init始终是Linux和UNIX系统的第一个进程。

就来自systemd,它用于取代红帽企业版Linux 7版本以前的init系统。在RHEL 7中,进程ID=1属于systemd这一新的初始化进程。下面我们一起来学习和掌握systemd进程及systemctl工具。

大多数 Linux 发行版的 init 系统是和 System V 相兼容的,被称为 sysvinit。这是人们最熟悉的 init 系统。一些发行版如 Slackware 采用的是 BSD 风格 Init 系统,这种风格使用较少,本文不再涉及。其他的发行版如 Gentoo 是自己定制的。Ubuntu 和 RHEL 采用 upstart 替代了传统的 sysvinit。而 Fedora 从版本 15 开始使用了一个被称为 systemd 的新 init 系统。 可以看到不同的发行版采用了不同的 init 实现,本系列文章就是打算讲述三个主要的 Init 系统:sysvinit,UpStart 和 systemd。了解它们各自的设计特点,并简要介绍它们的使用。

在 Linux 主要应用于服务器和 PC 机的时代,SysVinit 运行非常良好,概念简单清晰。它主要依赖于 Shell 脚本,这就决定了它的最大弱点:启动太慢。在很少重新启动的 Server 上,这个缺点并不重要。而当 Linux 被应用到移动终端设备的时候,启动慢就成了一个大问题。为了更快地启动,人们开始改进 sysvinit,先后出现了 upstart 和 systemd 这两个主要的新一代 init 系统。Upstart 已经开发了 8 年多,在不少系统中已经替换 sysvinit。Systemd 出现较晚,但发展更快,大有取代 upstart 的趋势。

sysvinit

详解见 鸟哥的Linux 私房菜-- 第十七章、认识系统服务(daemons), 浅析 Linux 初始化 init 系统,第 1 部分: sysvinit

sysvinit 就是 system V 风格的 init 系统,顾名思义,它源于 System V 系列 UNIX。它提供了比 BSD 风格 init 系统更高的灵活性。是已经风行了几十年的 UNIX init 系统,一直被各类 Linux 发行版所采用。

系统启动时,sysvinit 需要读取/etc/inittab 文件,来确定运行等级X。sysvinit 串行顺序地执行以下这些步骤,从而将系统初始化为预订的 runlevel X

  1. /etc/rc.d/rc.sysinit
  2. /etc/rc.d/rc
  3. /etc/rc.d/rcX.d/ (X 代表运行级别 0-6)
  4. /etc/rc.d/rc.local
  5. X Display Manager(如果需要的话)

而/etc/rc.d/rcX.d/下都是linux软链接文件,真实的脚本文件存放在/etc/init.d 目录下。文件名以 S 开头的脚本就是启动时应该运行的脚本,S 后面跟的数字定义了这些脚本的执行顺序。

Sysvinit 不仅需要负责初始化系统,还需要负责关闭系统。这种顺序的控制这也是依靠/etc/rc.d/rcX.d/目录下所有脚本的命名规则来控制的,在该目录下所有以 K 开头的脚本都将在关闭系统时调用,字母 K 之后的数字定义了它们的执行顺序。这些脚本负责安全地停止服务或者其他的关闭工作。

基于sysvinit提供的常见的shell命令有:

service & chkconfig

不同的 Linux 发行版在这些 sysvinit 的基本工具基础上又开发了一些辅助工具用来简化 init 系统的管理工作。servicechkconfig就是最流行常见的两个。

Sysvinit 的小结

Sysvinit 的优点是概念简单。Service 开发人员只需要编写启动和停止脚本,概念非常清楚;将 service 添加/删除到某个 runlevel 时,只需要执行一些创建/删除软连接文件的基本操作;这些都不需要学习额外的知识或特殊的定义语法(UpStart 和 Systemd 都需要用户学习新的定义系统初始化行为的语言)。 其次,sysvinit 的另一个重要优点是确定的执行顺序:脚本严格按照启动数字的大小顺序执行,一个执行完毕再执行下一个,这非常有益于错误排查。UpStart 和 systemd 支持并发启动,导致没有人可以确定地了解具体的启动顺序,排错不易。 但是串行地执行脚本导致 sysvinit 运行效率较慢,在新的 IT 环境下,启动快慢成为一个重要问题。此外动态设备加载等 Linux 新特性也暴露出 sysvinit 设计的一些问题。针对这些问题,人们开始想办法改进 sysvinit,以便加快启动时间,并解决 sysvinit 自身的设计问题。

neilChenXie commented 7 years ago

jenkins service

jenkins service result