0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

技术分享| 什么是Systemd

启扬ARM嵌入式开发 2025-12-18 17:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

继上次针对我司IAC-IMX8MP-Kit Yocto系统上Systemd的简介,这篇文章主要分析一下关于Service的一些关键属性,帮助大家更好的了解Systemd最重要的单元,更好的控制自己的服务。


c2baa976-dbf3-11f0-8ce9-92fbcf53809c.jpg

这里以一个客户的具体需求为例:自启动Qt应用,能够尽快的启动。这里贴上完整的service属性,依据对应属性详细分析,如下图所示:


c2cdb318-dbf3-11f0-8ce9-92fbcf53809c.png


总共分为三个单元,Unit、Service、Install。其中Unit单元的Description属性是对服务的描述,主要显示在服务启动时的表述,如下图所示。


c2d49b06-dbf3-11f0-8ce9-92fbcf53809c.png 

After属性主要是为了限制当前服务地启动顺序,这也是相比较传统init.d启动的优势之一,需求是自启动Qt,那么需要在服务框架之后启动,所以在weston.service之后。


Service单元是我们任务的执行单元,默认给予了很多属性可以配置,这里我们主要看一下第一张图中的几个属性,Environment属性是给予任务执行时附加的环境变量,这里为了让Qt成功运行,附加了XDG的运行目录和QT的运行平台,而Type属性是任务的启动方式,目前有oneshot、simple、forking三种,这里比较重要,单独介绍。


Oneshot适用于一次性完成的配置、设置的属性等,systemd会始终阻塞等待相应动作的完成,判断服务启动成功。如果在这里用来启动一个常驻的应用,那么启动的应用将会一直阻塞在那里,systemd会认为该服务一直在启动中,在等待一定时间后(往往是90s)会结束掉这个服务,服务启动失败。


Simple是最常用的配置,会正常启动进程,并且启动的应用会被自动放入后台常驻,非常适用于启动某些后台检测脚本以及应用程序等,但这里也要注意的是,当它启动的是一个脚本时,systemd的监控是针对脚本进程的,而对于其中的应用程序等则可能忽略掉相关信息,这里推荐是使用exec命令启动程序。


Forking属于老旧的配置,目前只有极少数服务采用这种配置。Forking适用于多进程的程序,当启动的父进程退出,子进程完全启动的时候,systemd认为服务启动成功。所以它并不适合用作在脚本里启动一个常驻进程。当它启动一个脚本,那么脚本将作为主进程,脚本里启动的常驻应用将作为子进程启动,而该子进程因为是常驻应用,将会阻塞父进程退出,导致systemd认为该服务一直在启动中,超过一定时间(往往是90s)后,会自动结束该服务,导致应用启动失败。


接下来是ExecStart属性,该属性主要用于执行动作,用于执行后面的应用程序,脚本等,需要注意的是,应用程序需要绝对路径启动,而脚本是新的脚本解释器去运行,注意环境变量,以及相关脚本变量。


最后是Install单元,该单元主要是跟开机自启动有关系,其中WantedBy属性简单来说便是依赖,当用户执行systemctl enable xxx.service的时候,systemd会自动创建软链接到WantedBy的指定目标单元下,意味着该服务会随着目标单元激活而自动启动。像第一张图中的multi-user.target,意味着当系统进入多用户模式时,该服务会自动启动。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5212

    文章

    20802

    浏览量

    339135
  • imx8
    +关注

    关注

    3

    文章

    42

    浏览量

    50963
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux使用Systemd管理进程服务

    systemd是目前Linux系统上主要的系统守护进程管理工具,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能对服务本身进行更多的管理
    发表于 11-28 09:07 868次阅读

    Linux使用Systemd管理进程服务

    今天浩道跟大家分享linux运维中大家很少用到的一个硬核干货,使用 Systemd 管理进程服务。让你体验一下该技巧带来的便捷性!
    发表于 12-12 09:02 969次阅读

    内核构建正常,但 systemd加载失败,为什么?

    我已经按照202306发行说明,但它无法挂载 systemd 的文件系统并且没有完成启动。 我按照书中的指示进行作,没有任何更改,即: apt-get install build-essential
    发表于 03-05 06:36

    如何在 Linux 上从 NetworkManager 切换为 systemd

    今天,大部分主流 Linux 发行版都已经采用了 systemd 作为默认的初始化(init)系统。  正如其作者所说,作为一个 "从未完成、从未完善、但一直追随技术进步" 的系统
    发表于 11-25 10:08

    systemd定时器的基本操作方法

    定时器任务作为嵌入式系统中常见的应用,systemd 定时器为用户提供更多的可配置功能以及优化选项。本文列举了 systemd 定时器基本操作方法,以及和cron 对比,帮助用户更快得使用。更多的技术细节和功能请参考下面的链接内
    发表于 01-01 07:37

    i.M8XMQ开发板如何通过Systemd服务实现应用自启

    飞凌OKMX8MQ-C开发板是基于ARM®Cortex-A53和Cortex-M4的内核,具有业界领先的音频、语音和视频处理功能。这次我们就来介绍一下如何通过systemd服务实现音频应用的自启
    发表于 04-25 15:22

    如何将imx8mpevk板的默认Systemd - Init Manager更改为Sysvinit?

    如何将 imx8mpevk 板的默认 Systemd - Init Manager 更改为 Sysvinit。是否更改了 build/conf/local.conf 文件 INIT_MANAGER
    发表于 03-15 06:42

    Systemd 又遭背锅:创建 Devuan 是为了保证 Linux 的稳定性

    Systemd 开发者将社区细化,大大降低了稳定性,并增加了复杂性,但却没有多少实际价值。”
    的头像 发表于 12-14 16:55 5617次阅读

    Linux系统与服务管理工具Systemd被曝存在3大漏洞

    2013 年 4 月引入(systemd v203),并在 2016 年 2 月可利用(systemd v230),研究人员写了一个 PoC,可在 i386 上获得 eip 控制。
    的头像 发表于 01-25 16:51 4088次阅读
    Linux系统与服务管理工具<b class='flag-5'>Systemd</b>被曝存在3大漏洞

    走进Linux之systemd启动过程

    的问题,systemd是Linux系统机器的另一种启动方式,宣称弥补了以传统Linux SysV init为基础的系统的缺点。
    发表于 04-27 19:14 3736次阅读

    Linux项目开发,你必须了解Systemd服务!

    1.Systemd简介Systemd是什么,以前linux系统启动init机制,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能对服务
    的头像 发表于 06-18 17:59 1792次阅读
    Linux项目开发,你必须了解<b class='flag-5'>Systemd</b>服务!

    Systemd是什么?Systemd Service配置文件详解

    Systemd是什么,以前linux系统启动init机制,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能对服务本身进行更多的管理
    的头像 发表于 07-22 18:03 3395次阅读

    systemd journal收集日志的三种方式

    随着 systemd 成了主流的 init 系统,systemd 的功能也在不断的增加,比如对系统日志的管理。Systemd 设计的日志系统好处多多,这里笔者就不再赘述了,本文笔者主要介绍 s
    的头像 发表于 10-23 11:50 1763次阅读
    <b class='flag-5'>systemd</b> journal收集日志的三种方式

    技术分享】正确编写SysV Init脚本以实现Systemd兼容(上)

    /),但在Systemd系统中,这些脚本需通过systemd-sysv-generator换为原生服务单元。若脚本未遵循LinuxStandardBase(LSB)规范
    的头像 发表于 10-28 11:45 943次阅读
    【<b class='flag-5'>技术</b>分享】正确编写SysV Init脚本以实现<b class='flag-5'>Systemd</b>兼容(上)

    技术分享】Systemd原生服务配置最佳实践(下)

    上期我们说到sysv的规范,创建以及示例,那么我们今天就来讲讲Systemd的原生服务配置。为何要迁移到Systemd原生服务?尽管规范化的SysV脚本可临时解决问题,但可能存在以下缺陷:效率低下
    的头像 发表于 10-29 11:40 621次阅读
    【<b class='flag-5'>技术</b>分享】<b class='flag-5'>Systemd</b>原生服务配置最佳实践(下)