linux 系统进程管理工具systemd(systemctl命令、创建自己的systemd服务、单位类型Type=notify和Type=forking的区别)

阅读: 评论:0

linux 系统进程管理工具systemd(systemctl命令、创建自己的systemd服务、单位类型Type=notify和Type=forking的区别)

linux 系统进程管理工具systemd(systemctl命令、创建自己的systemd服务、单位类型Type=notify和Type=forking的区别)

文章目录

  • linux systemd
    • 一、什么是 systemd
      • systemd 特点
      • unit(单元)
      • systemd unit目录
      • Unit 和 Target
      • Unit 文件结构
    • 二、配置举例
      • 单位类型Type=notify和Type=forking的区别
    • 三、Linux命令——systemctl
      • 查看当前systemed管理的所有服务
    • 四、如何在 Linux 上通知 systemd 服务的就绪状态
      • 在Go语言中向systemd发送"服务已就绪"通知 demo
    • 五、工作常见总结
      • systemd服务脚本执行报错:su: cannot set groups: Operation not permitted
    • 六、参考

linux systemd

一、什么是 systemd

Linux 系统在启动过程中,内核完成初始化以后,由内核第一个启动的程序便是 init 程序,路径为 /sbin/init(为一个软连接,链接到真实的 init 进程),其 PID 为1,它为系统里所有进程的“祖先”,Linux 中所有的进程都由 init 进程直接或间接进行创建并运行,init 进程以守护进程的方式存在,负责组织与运行系统的相关初始化工作,让系统进入定义好的运行模式,如命令行模式或图形界面模式。

Systemd(系统管理守护进程),最开始以GNU GPL协议授权开发,现在已转为使用GNU LGPL协议,它是如今讨论最热烈的引导和服务管理程序。如果你的Linux系统配置为使用Systemd引导程序,它取替传统的SysV init,启动过程将交给systemd处理。Systemd的一个核心功能是它同时支持SysV init的后开机启动脚本。

systemd是目前Linux系统上主要的系统守护进程管理工具,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能对服务本身进行更多的管理。所以从CentOS 7开始也由systemd取代了init作为默认的系统进程管理工具

systemd 是内核启动后的第一个用户进程,PID 为1,是所有其它用户进程的父进程。

systemd 特点

  • 最新系统都采用systemd管理(RedHat7,CentOS7,Ubuntu20.04…)
  • CentOS7 支持开机并行启动服务,显著提高开机启动效率
  • CentOS7关机只关闭正在运行的服务,而CentOS6,全部都关闭一次。
  • CentOS7服务的启动与停止不再使用脚本进行管理,也就是/etc/init.d下不在有脚本
  • CentOS7使用systemd解决原有模式缺陷,比如原有service不会关闭程序产生的子进程

unit(单元)

系统初始化需要做的事情非常多。需要启动后台服务,比如启动 ssh 服务;需要做配置工作,比如挂载文件系统。这个过程中的每一步都被 systemd 抽象为一个配置单元,即 unit。可以认为一个服务是一个配置单元,一个挂载点是一个配置单元,一个交换分区的配置是一个配置单元等等。

下面是一些常见的 unit 类型:

  • service :代表一个后台服务进程,比如 MySQLd。这是最常用的一类。

  • socket :此类配置单元封装系统和互联网中的一个套接字 。当下,systemd 支持流式、数据报和 连续包的 AF_INET、AF_INET6、AF_UNIX socket 。每一个套接字配置单元都有一个相应的服务配置单元 。相应的服务在第一个"连接"进入套接字时就会启动(例如:nscd.socket 在有新连接后便启动 nscd.service)。

  • device :此类配置单元封装一个存在于 Linux 设备树中的设备。每一个使用 udev 规则标记的设备都将会在 systemd 中作为一个设备配置单元出现。

  • mount :此类配置单元封装文件系统结构层次中的一个挂载点。Systemd 将对这个挂载点进行监控和管理。比如可以在启动时自动将其挂载;可以在某些条件下自动卸载。Systemd 会将 /etc/fstab 中的条目都转换为挂载点,并在开机时处理。

  • automount :此类配置单元封装系统结构层次中的一个自挂载点。每一个自挂载配置单元对应一个挂载配置单元 ,当该自动挂载点被访问时,systemd 执行挂载点中定义的挂载行为。

  • swap:和挂载配置单元类似,交换配置单元用来管理交换分区。用户可以用交换配置单元来定义系统中的交换分区,可以让这些交换分区在启动时被激活。

  • target :此类配置单元为其他配置单元进行逻辑分组。它们本身实际上并不做什么,只是引用其他配置单元而已。这样便可以对配置单元做一个统一的控制。这样就可以实现大家都已经非常熟悉的运行级别概念。比如想让系统进入图形化模式,需要运行许多服务和配置命令,这些操作都由一个个的配置单元表示,将所有这些配置单元组合为一个目标(target),就表示需要将这些配置单元全部执行一遍以便进入目标所代表的系统运行状态。 (例如:multi-user.target 相当于在传统使用 SysV 的系统中运行级别 5)

  • timer:定时器配置单元用来定时触发用户定义的操作,这类配置单元取代了 atd、crond 等传统的定时服务。

  • snapshot :与 target 配置单元相似,快照是一组配置单元。它保存了系统当前的运行状态。

  • path:文件系统中的一个文件或目录。

  • scope:用于 cgroups,表示从 systemd 外部创建的进程。

  • slice:用于 cgroups,表示一组按层级排列的单位。slice 并不包含进程,但会组建一个层级,并将 scope 和 service 都放置其中。

      **每个配置单元都有一个对应的配置文件,系统管理员的任务就是编写和维护这些不同的配置文件,比如一个 MySQL 服务对应一个 mysql.service 文件。**
    
  • .automount:用于控制自动挂载文件系统,相当于 SysV-init 的 autofs 服务

  • .device:对于 /dev 目录下的设备,主要用于定义设备之间的依赖关系

  • .mount:定义系统结构层次中的一个挂载点,可以替代过去的 /etc/fstab 配置文件

  • .path:用于监控指定目录或文件的变化,并触发其它 Unit 运行

  • .scope:这种 Unit 文件不是用户创建的,而是 Systemd 运行时产生的,描述一些系统服务的分组信息

  • .service:封装守护进程的启动、停止、重启和重载操作,是最常见的一

本文发布于:2024-02-04 19:31:06,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170714809858812.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:自己的   管理工具   进程   命令   区别
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23