首页 > 系统相关 >关于 Linux中systemd的一些笔记

关于 Linux中systemd的一些笔记

时间:2022-12-12 15:32:33浏览次数:77  
标签:systemd github service liruilongs 笔记 io Linux root


写在前面


  • 嗯,准备​​RHCA​​,学习整理这部分知识
  • 博文内容涉及:
  • ​systemd​​简述
  • 对于​​unit​​的信息的介绍
  • 通过​​systemctl​​​命令控制​​Service unit​​​的​​Demo​
  • ​Service unit​​配置文件内容,权值的一些介绍

傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波


一、Systemd 简述

​systemd​​​是Linux操作系统的​​系统和服务管理器​​​。在系统启动时或者正在运行的系统上的一个​​守护进程​​​,​​systemd​​​负责​​激活系统资源、服务器守护程序和其他进程​​​,​​systemd​​​是​​RHEL 7​​之后出现的。

​守护进程(daemon)​​​是在后台执行各种任务的进程。通常,守护程序在引导时自动启动并继续运行直到系统关闭或手动停止。许多守护程序的名称的约定以​​字母d结尾​​。

关于​​RHEL​​启动进程管理:

  • 在​​RHEL 5​​​的时候,使用​​ Sys init​​​,启动速度最慢的,无论进程相互之间有无依赖关系,都是​​串行启动过程​​,
  • ​RHEL 6​​​的时候,使用​​ Upstart init​​​相对启动速度快一点有所改进。​​有依赖的进程之间依次启动​​​而其他与之没有依赖关系的则​​并行同步启动​​。
  • ​RHEL 7 Systemd​​​与以上都不同。所有进程无论​​有无依赖关系​​​则都是​​并行启动​​(很多时候进程没有真正启动而是只有一个信号或者说是标记而已,在真正利用的时候才会真正启动)。

​Systemd​​为了解决上文的问题而诞生。它的目标是,为系统的启动和管理提供一套完整的解决方案,

​RHEL​​​启动的​​第一个进程(PID 1)​​​就是​​systemd​​,提供的功能包括:

  • ​并行化​​功能(同时启动多个服务),可提高系统的启动速度。
  • ​按需启动​​后台程序而无需单独的服务。
  • ​自动管理服务依赖关系​​,可以防止长时间超时。例如,网络相关服务在网络可用之前不会尝试启动。
  • 使用​​Linux控制组(Cgroup)​​一起跟踪相关进程的方法。

关于 Linux中systemd的一些笔记_配置文件

systemd Targets 启动级别

二、systemctl 命令管理系统

​systemctl​​​是​​ Systemd​​​ 的主命令,​​systemctl​​​命令用于管理不同类型的系统对象,这些对象称之为​​units​​。

  • ​Service unit​​​:用于定义​​系统服务​​​,文件扩展名为​​.service​
  • ​Target unit​​​:用于模拟实现“​​运行级别​​​”,文件扩展名为​​.target​​​,可以理解​​Target ​​​就是一个 ​​Unit​​​ 组,包含许多相关的 ​​Unit ​
  • ​Device unit​​​:用于定义内核识别的​​设备​​​,文件扩展名为​​.device​
  • ​Mount unit:​​​用于定义文件系统​​挂载点​​​,文件扩展名为​​.mount​
  • ​Socket unit​​​:用于标识​​进程间通信​​​用的socket文件,文件扩展名为​​.socket​
┌──[[email protected]]-[~]
└─$ systemctl status cockpit.socket #CocKpit驾驶舱 和SSH类似,用于远程控制,类似于阿里云的控制台。为初级管理员提供基本操作,通过web端的控制台,访问地址:服务器IP:9090
● cockpit.socket - Cockpit Web Service Socket
Loaded: loaded (/usr/lib/systemd/system/cockpit.socket; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:cockpit-ws(8)
Listen: [::]:9090 (Stream)
  • ​Snapshot unit​​​:管理​​系统快照​​​,文件扩展名为​​.snapshot​
  • ​Swap unit​​​:用于标识​​swap设备​​​,文件扩展名为​​.swap​
  • ​Automount unit​​​:文件系统的​​自动挂载点​​​,文件扩展名为​​.automount​
  • ​Path uni​​​t:用于根据文件系统上特定对象的变化来启动其他服务,文件扩展名为​​.path​
  • ​Timer unit​​​:用于管理​​计划任务​​​,文件扩展名为​​.timer​
┌──[[email protected]]-[~]
└─$ systemctl status systemd-tmpfiles-clean.timer #用于定时清理 `/tmp`,`/var/tmp`之类的临时文件
● systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories
Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; static; vendor preset: disabl>
Active: active (waiting) since Sun 2022-04-03 11:24:00 CST; 1h 48min ago
Trigger: Mon 2022-04-04 11:39:07 CST; 22h left
Docs: man:tmpfiles.d(5)
man:systemd-tmpfiles(8)

Apr 03 11:24:00 liruilongs.github.io systemd[1]: Started Daily Cleanup of Temporary Directories.
┌──[[email protected]]-[~]
└─$
  • ​Slice unit​​​:用于​​资源管理​​​,文件扩展名为​​.slice​

1.查看units列表信息

列出​​loaded​​​(配置文件以加载)的​​units​

┌──[[email protected]]-[~]
└─$ systemctl list-units
UNIT LOAD ACTIVE SUB DESCRIPTION
proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executable File>
.............

命令输出说明:

  • ​UNIT​​:服务单元名称。
  • ​LOAD​​​: ​​systemd​​​是否正确解析了单元的配置并将该单元​​加载到内存中​​。
  • ​ACTIVE​​​:单元的高级别激活状态。此信息表明单元​​是否已成功启动​​。
  • ​SUB​​​:单元的​​低级别激活状态​​。此信息指示有关该单完的更多详细信息。信息视单元类型、状态以及单元的执行方式而异。
  • ​DESCRIPTION​​​:单元的简短​​描述​​。

关于 Linux中systemd的一些笔记_Linux_02

列出全部的units

┌──[[email protected]]-[~]
└─$ systemctl list-unit-files
UNIT FILE STATE
proc-sys-fs-binfmt_misc.automount static
-.mount generated
boot.mount generated
dev-hugepages.mount static
dev-mqueue.mount static
proc-sys-fs-binfmt_misc.mount static
sys-fs-fuse-connections.mount static
sys-kernel-config.mount static
sys-kernel-debug.mount static
tmp.mount disabled
systemd-ask-password-console.path static
.....

查看指定的系统对象

查看timer,系统定时任务

┌──[[email protected]]-[~]
└─$ systemctl list-units -i timer
0 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
┌──[[email protected]]-[~]
└─$ systemctl list-unit-files -t timer
UNIT FILE STATE
dnf-makecache.timer enabled #yaml仓库定时更新
fstrim.timer disabled
systemd-tmpfiles-clean.timer static # 临时文件清理
unbound-anchor.timer enabled

4 unit files listed.
┌──[[email protected]]-[~]
└─$

查看socket套接字

┌──[[email protected]]-[~]
└─$ systemctl list-unit-files -t socket
UNIT FILE STATE
cockpit-wsinstance-http-redirect.socket static
cockpit-wsinstance-http.socket static
cockpit-wsinstance-https-factory.socket static
[email protected] static
cockpit.socket enabled
dbus.socket static

列出类型为​​service​​​,状态为​​loaded​​​和​​active​​的 unit

┌──[[email protected]]-[~]
└─$ systemctl list-units -t service
UNIT LOAD ACTIVE SUB DESCRIPTION
auditd.service loaded active running Security Auditing Service

列出类型为​​service​​​,状态为​​active​​​和​​inactive​​ 的unit

┌──[[email protected]]-[~]
└─$ systemctl list-units --type service --all

查看失败的服务

┌──[[email protected]]-[~]
└─$ systemctl --failed -t service
UNIT LOAD ACTIVE SUB DESCRIPTION
● kdump.service loaded failed failed Crash recovery kernel arming
.....

三、systemctl操作Service unit

┌──[[email protected]]-[~]
└─$ systemctl status sshd
● sshd.service - OpenSSH server daemon #单元的描述信息
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) #子状态,加载的配置文件,默认开机自启
Active: active (running) since Sun 2022-04-03 11:24:03 CST; 2h 16min ago #运行状态,时间
Docs: man:sshd(8) #帮助文档
man:sshd_config(5)
Main PID: 880 (sshd) #主进程
Tasks: 1 (limit: 6044) # 任务量
Memory: 7.2M #消耗的内存
CGroup: /system.slice/sshd.service # 用的什么slice
└─880 /usr/sbin/sshd -D [email protected],[email protected],aes2>
Apr 03 11:24:02 liruilongs.github.io systemd[1]: Starting OpenSSH server daemon... #启动日志,什么进程引导激活的
Apr 03 11:24:03 liruilongs.github.io sshd[880]: Server listening on 0.0.0.0 port 22. #监听的端口
Apr 03 11:24:03 liruilongs.github.io sshd[880]: Server listening on :: port 22.
Apr 03 11:24:03 liruilongs.github.io systemd[1]: Started OpenSSH server daemon. #启动服务
Apr 03 11:25:30 liruilongs.github.io sshd[1112]: Accepted publickey for root from 172.25.254.254 port > #连接日志
Apr 03 11:25:30 liruilongs.github.io sshd[1112]: pam_unix(sshd:session): session opened for user root >
lines 1-17/17 (END)

查看Service单元状态信息

┌──[[email protected]]-[~]
└─$ systemctl is-active sshd
active
┌──[[email protected]]-[~]
└─$ systemctl is-enabled sshd
enabled
┌──[[email protected]]-[~]
└─$ systemctl is-
is-active is-enabled is-failed is-system-running

配置文件加载

优先级从高到低

  • 本地配置的系统单元: ​​/etc/systemd/system​
  • 运行时配置的系统单元: ​​/run/systemd/system​
  • 软件包安装的系统单元: ​​/usr/lib/systemd/system​

默认的服务配置文件位置:​​/usr/lib/systemd/system​

┌──[[email protected]]-[~]
└─$ systemctl status sshd | head -2
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)

添加高优先级配置文件:​​/run/systemd/system​

┌──[[email protected]]-[~]
└─$ cp /usr/lib/systemd/system/sshd.service /run/systemd/system/sshd.service
┌──[[email protected]]-[~]
└─$ systemctl daemon-reload
┌──[[email protected]]-[~]
└─$ systemctl status sshd | head -2
● sshd.service - OpenSSH server daemon
Loaded: loaded (/run/systemd/system/sshd.service; enabled; vendor preset: enabled)

添加高优先级配置文件,​​/etc/systemd/system​

┌──[[email protected]]-[~]
└─$ cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/
┌──[[email protected]]-[~]
└─$ systemctl daemon-reload
┌──[[email protected]]-[~]
└─$ systemctl status sshd | head -2
● sshd.service - OpenSSH server daemon
Loaded: loaded (/etc/systemd/system/sshd.service; enabled; vendor preset: enabled)
┌──[[email protected]]-[~]
└─$

配置文件内容

┌──[[email protected]]-[~]
└─$ cat /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon #描述信息
Documentation=man:sshd(8) man:sshd_config(5) #帮助文档
After=network.target sshd-keygen.target #依赖关系,在...之后执行
Wants=sshd-keygen.target # 强依赖

[Service]
Type=notify #notify类型
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config #环境变量读取
EnvironmentFile=-/etc/sysconfig/sshd # - 号为文件可以不存在
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY # 启动命令
ExecReload=/bin/kill -HUP $MAINPID # reload从新初始化
KillMode=process #设置在单元停止时,杀死进程的方法 process 表示仅杀死主进程
Restart=on-failure #仅在服务进程异常退出时重启
RestartSec=42s # 42秒后重启

[Install]
WantedBy=multi-user.target #属于那个target
┌──[[email protected]]-[~]
└─$

手册查看,不错的翻译 ​​systemd.service 中文手册​

┌──[[email protected]]-[~]
└─$ man -k systemd

控制Service unit

启动停止服务

systemctl start sshd.service 
systemctl stop sshd.service

重新加载配置文件

┌──[[email protected]]-[~]
└─$ systemctl reload sshd #还是原来的进程,只是从新加载配置文件

重启服务

┌──[[email protected]]-[~]
└─$ systemctl restart sshd #一个新的进程

查看服务状态

┌──[[email protected]]-[~]
└─$ systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2022-04-03 11:46:36 CST; 3h 5min ago
Docs: man:httpd.service(8)
Main PID: 1616 (httpd)
Status: "Running, listening on: port 80"
Tasks: 213 (limit: 6044)
Memory: 33.7M
CGroup: /system.slice/httpd.service
├─1616 /usr/sbin/httpd -DFOREGROUND
├─1617 /usr/sbin/httpd -DFOREGROUND
├─1618 /usr/sbin/httpd -DFOREGROUND
├─1619 /usr/sbin/httpd -DFOREGROUND
└─1620 /usr/sbin/httpd -DFOREGROUND

Apr 03 11:46:35 liruilongs.github.io systemd[1]: Starting The Apache HTTP Server...
Apr 03 11:46:36 liruilongs.github.io systemd[1]: Started The Apache HTTP Server.
Apr 03 11:46:36 liruilongs.github.io httpd[1616]: Server configured, listening on: port 80

设置开机自启,添加一个软链接

┌──[[email protected]]-[~]
└─$ systemctl enable httpd --now #立刻激活
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
┌──[[email protected]]-[~]
└─$ systemctl is-enabled httpd
enabled
┌──[[email protected]]-[~]
└─$ systemctl is-active httpd
active
┌──[[email protected]]-[~]
└─$

设置服务开机不启动

┌──[[email protected]]-[~]
└─$ systemctl disable httpd
Removed /etc/systemd/system/multi-user.target.wants/httpd.service.

服务禁用

┌──[[email protected]]-[~]
└─$ systemctl mask httpd
Created symlink /etc/systemd/system/httpd.service → /dev/null.
┌──[[email protected]]-[~]
└─$ systemctl start httpd
Failed to start httpd.service: Unit httpd.service is masked.
┌──[[email protected]]-[~]
└─$ systemctl status httpd | head -2
● httpd.service
Loaded: masked (Reason: Unit httpd.service is masked.)

可以删除软链接取消禁用

┌──[[email protected]]-[~]
└─$ ll /etc/systemd/system/httpd.service
lrwxrwxrwx. 1 root root 9 Apr 3 16:08 /etc/systemd/system/httpd.service -> /dev/null
┌──[[email protected]]-[~]
└─$ rm -r /etc/systemd/system/httpd.service
rm: remove symbolic link '/etc/systemd/system/httpd.service'? y
┌──[[email protected]]-[~]
└─$ systemctl daemon-reload
┌──[[email protected]]-[~]
└─$ systemctl start httpd

可以通过​​unmask​​来取消禁用

┌──[[email protected]]-[~]
└─$ systemctl mask httpd
Created symlink /etc/systemd/system/httpd.service → /dev/null.
┌──[[email protected]]-[~]
└─$ systemctl unmask httpd
Removed /etc/systemd/system/httpd.service.
┌──[[email protected]]-[~]
└─$

unit依赖

可以通过如下命令查看unit的启动依赖关系

systemctl list-dependencies cups.service 
systemctl list-dependencies cups.service --reverse

查看​​httpd Service ​​​的​​正向依赖​​,在httpd之前启动

┌──[[email protected]]-[~]
└─$ systemctl list-dependencies httpd
httpd.service
● ├─-.mount
● ├─httpd-init.service
● ├─system.slice
● └─sysinit.target
● ├─dev-hugepages.mount
● ├─dev-mqueue.mount
● ├─dracut-shutdown.service
● ├─import-state.service
● ├─iscsi-onboot.service
● ├─kmod-static-nodes.service
......
......
┌──[[email protected]]-[~]
└─$

查看​​httpd Service ​​​的​​反向依赖​​,在httpd之后启动

┌──[[email protected]]-[~]
└─$ systemctl list-dependencies httpd --reverse
httpd.service
● └─multi-user.target
● └─graphical.target

查看​​multi-user.target​​​的​​正向依赖​​是否有httpd

┌──[[email protected]]-[~]
└─$ systemctl list-dependencies multi-user.target | grep httpd
● ├─httpd.service

嗯,关于​​systemd​​​和小伙伴们分享到这里,这块涉及的内容很多,这里简单介绍,在​​Linux​​​生态系统中,​​systemd​​​被部署到了大多数的标准​​Linux​​​发行版中,只有为数不多的几个发行版尚未部署。关于​​systemd​​启动过程、对其他unit的控制和管理、对系统运行级别等的控制,感兴趣小伙伴可以了解下。


标签:systemd,github,service,liruilongs,笔记,io,Linux,root
From: https://blog.51cto.com/u_13474506/5929852

相关文章

  • 《云原生入门级开发者认证》学习笔记之云原生基础设施之容器技术
    写在前面嗯,报了考试,整理课堂笔记记忆学习的原因:虽然考了​​CKA​​​,了解了一些​​K8s​​相关的知识但是对​​云原生​​整个体系一直都很模糊希望对云原生有一个......
  • 吴恩达老师的机器学习和深度学习课程笔记打印版
    注意:下载笔记、视频、代码我和同学将吴恩达老师机器学习和深度学习课程笔记做成了打印版,放在github上,下载后可以打印。公布了深度学习笔记的word和markdown文件!希望同学们能......
  • Linux查找find命令全面剖析
    Linux查找find命令全面剖析1.文件查找在文件系统上查找符合条件的文件1.1简述locate命令非实时查找(数据库查找)依赖于事先构建的索引,索引的构建是在系统较为空闲时自动......
  • visual studio 2015/2019下使用gcc调试linux c++开发环境搭建完整详解
    一直以来,相信绝大部分的开发都是windows/mac下做开发,尤其是非嵌入式和qt系的,而开源服务器程序绝大部分都是跑在Linux下,几乎就没有跑在windows下的。一直以来开发人员都......
  • core部署linux、国产化
    前言:本文基于centos7.9操作系统,服务器x86/x64,所有操作在虚拟机中操作,记录部署过程中出现的问题,在此记录解决方案。查看系统版本命令:cat/etc/redhat-releasecat/proc/v......
  • 【小源笔记】第六期 | 解决应用申请权限失败导致安装报错问题
    前言笔者最近在开发应用时遇到installfailedduetograntrequestpermissionsfailed,报错信息大概意思为由于申请权限失败导致安装失败查询相关资料得知,应用APL等级有......
  • #yyds干货盘点# react笔记之学习之props父子传值
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • #yyds干货盘点# react笔记之学习之显示日期
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • 技术干货 | 漫游Linux块IO
     前言在计算机的世界里,我们可以将业务进行抽象简化为两种场景——计算密集型和IO密集型。这两种场景下的表现,决定这一个计算机系统的能力。数据库作为一个典型的基础软件,它......
  • Jgit的使用笔记
    原文:Jgit的使用笔记-Stars-One的杂货小窝之前整的一个系统,涉及到git代码的推送,是通过cmd命令去推送的,然后最近在产品验收的时候,测试部门随意填了个git仓库,然后导致仓......