Linux 用户进程启动与Systemd

2024-05-10 06:52

本文主要是介绍Linux 用户进程启动与Systemd,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Linux用户空间的启动

我们都知道,Linux在内核的初始化自身的流程结束后,就会将程序流的运行转到用户态,也就是进入init进程流之后,他会按照这个流程进行初始化:

  • init进程初始化

  • 基础的底层服务:比如说udevd和syslogd

  • 网络配置

  • 中高层服务,比如说cron和一些打印服务乱七八糟的

  • 登录会话

Systemd与init进程

init是Linux上的一个用户空间程序,她负责启动和终止系统中一些基础的服务。

我们现在大多数使用的都是systemd这个init程序,这里我们就不费心介绍其他的了(值得一提的是Red Hat Enterpprise Linux等一些发行版使用的是SystemV Init)

systemd包含了一系列的启动流程:比如说cron啊,inetd等,它可以选择延迟开启,意味着——只有需要了我们才会加载,这种惰式加载随处可见!

Systemd加载的步骤:

  1. systemd加载配置信息

  2. systemd判定启动目标,它通常是default.target

  3. 判定启动目标的所有依赖关系

  4. 激活所需要的组件然后启动目标

  5. 现在systemd将会响应系统信息然后激活其他组件

systemd的启动很灵活,争取将启动模块化,降低耦合度!

单元类型与单元

他不仅仅负责处理进程和服务,还可以挂载文件系统,监控网络套接字和类型时系统。这些功能我们称之为:单元;他们的类别是单元类型;开启一个单元被称为激活!

查询man systemd来查看手册!

  • 目标单元 :控制Unix传统服务进程

  • 挂载单元:控制文件系统的挂载

  • 目标单元:控制其余单元

Service units, which start and control daemons and the processes they consist of. For details, seesystemd.service(5).
​
Socket units, which encapsulate local IPC or network sockets in the system, useful forsocket-based activation. For details about socket units, see systemd.socket(5), for details onsocket-based activation and other forms of activation, see daemon(7).
​
Target units are useful to group units, or provide well-known synchronization points duringboot-up, see systemd.target(5).
​
Device units expose kernel devices in systemd and may be used to implement device-basedactivation. For details, see systemd.device(5).
​
Mount units control mount points in the file system, for details see systemd.mount(5).
​
Automount units provide automount capabilities, for on-demand mounting of file systems as well as parallelized boot-up. See systemd.automount(5).
​
Timer units are useful for triggering activation of other units based on timers. You may finddetails in systemd.timer(5).
​
Swap units are very similar to mount units and encapsulate memory swap partitions or files of theoperating system. They are described in systemd.swap(5).
​
Path units may be used to activate other services when file system objects change or are modified.See systemd.path(5).
​
Slice units may be used to group units which manage system processes (such as service and scopeunits) in a hierarchical tree for resource management purposes. See systemd.slice(5).
​
Scope units are similar to service units, but manage foreign processes instead of starting them as
well. See systemd.scope(5).

依赖关系

一些服务需要为更加上层的服务提供自己的服务,同理,也就会一些服务是需要下层的服务来支持。这里,就很自然的产生了依赖关系:

  • Request:不可缺少的关系,如果要求Request的单元失败那么系统就会关闭这个被依赖的单元

  • Wants:表达了指示用于激活,单元被激活的时候,Wants类型的依赖关系也会被激活

  • Requisite:标识必须在激活之前对应的单元被激活,这个关系最强

  • Conflict:表达的是冲突——两者互斥

依赖的顺序可以使用

  1. Before:当前的单元会在Before中列出的单元之前启动,比如说在foo.target中写下bar.target的时候,footarget先启动

  2. After:那就是相反!

配置地点

主要在两个地方:/usr/lib/systemd/system作为系统的单元目录和系统配置目录(/etc/systemd/system),简单的讲:我们不要改动系统的单元目录,因为它由系统维护,我们想要保存自定义设置,还是改动后者!

使用systemctl来查看systemd服务状态

systemctl就是看systemd的工作状态的:

systemctl list-units

当然,其他的常见用法应该说是看手册的事情:

linux systemctl 指令 —— 阮一峰 - 七脉 - 博客园 (cnblogs.com)

动手试试看

我们可以写一个很简单的服务文件:

test1.target

[Unit]
Description=test 1

test2.target

[Unit]
Description=test 2
Wants=test1.target

这两个文件扔到/etc/sysemd/system下面去,然后

systemctl start test2.target

Comments And Further Reading

udevd

啥是udevd呢?如果熟悉Linux2.6就会知道他是取代了之前Linux内核的devfs出现的——为了管理设备的一个子系统。现在的系统会采取监听uevent的方式来进行对/dev设备的管理。有趣的是,udevd运行在用户态而不是核心态。

  • 现在 udev 只为那些连接到 Linux 操作系统的设备产生设备文件。udevd能通过定义一个 udev 规则 (rule) 来产生匹配设备属性的设备文件,这些设备属性可以是内核设备名称、总线路径、厂商名称、型号、序列号或者磁盘大小等等。

  • 动态管理:当设备添加 / 删除时,udev 的守护进程侦听来自内核的 uevent,以此添加或者删除 /dev下的设备文件,所以 udev 只为已经连接的设备产生设备文件,而不会在 /dev下产生大量虚无的设备文件。

  • 自定义命名规则:通过 Linux 默认的规则文件,udev 在 /dev/ 里为所有的设备定义了内核设备名称,比如 /dev/sda、/dev/hda、/dev/fd等等。由于 udev 是在用户空间 (user space) 运行,Linux 用户可以通过自定义的规则文件,灵活地产生标识性强的设备文件名,比如 /dev/boot_disk、/dev/root_disk、/dev/color_printer等等。

简单阐述一下流程吧!

当udevd从Kernel中监听到了一个udevent事件的时候,他会判断这是怎样的uevent

A. 如果是添加:

他会在配置文件里查找规则文件所在目录!然后在规则目录里按顺序查询所有规则文件。

A.1 如果有所匹配那么按照匹配的规则

在/dev/下为该设备产生相应的设备文件

B.否则则会用内核设备名称作为设备文件\

B. 那就是删除,查找对应的文件设备直接进行删除即可

在 Linux 使用 systemd-udevd 管理你的接入硬件 | Linux 中国 - 知乎 (zhihu.com)

linux udevd服务 设备管理工具 简介-CSDN博客

syslogd

任何程序都可以通过syslog记录事件。我们的Syslog可以纪录系统事件,可以写到一个文件或设备中,或给用户发送一个信息。它能记录本地事件或通过网络纪录另一个主机上的事件。

不过,现在我们的发行版都采用其他log作为代替品了。比如说我的ArchLinux是采用了journalctl,自己可以查询自己的发行版采用的系统日志!

Linux下如何查看系统日志_archlinux 查看启动日志-CSDN博客

cron

定时任务!我们的一些程序是依赖定时器的,举个例子:周期性的备份等

这篇关于Linux 用户进程启动与Systemd的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/975744

相关文章

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

Mysql用户授权(GRANT)语法及示例解读

《Mysql用户授权(GRANT)语法及示例解读》:本文主要介绍Mysql用户授权(GRANT)语法及示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql用户授权(GRANT)语法授予用户权限语法GRANT语句中的<权限类型>的使用WITH GRANT

Linux命令之firewalld的用法

《Linux命令之firewalld的用法》:本文主要介绍Linux命令之firewalld的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux命令之firewalld1、程序包2、启动firewalld3、配置文件4、firewalld规则定义的九大

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、