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

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

3天内不再提示

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

ZLG致远电子 2025-10-29 11:40 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

上期我们说到sysv的规范,创建以及示例,那么我们今天就来讲讲Systemd的原生服务配置。


0b7b4f5a-b479-11f0-8ce9-92fbcf53809c.jpg  为何要迁移到Systemd原生服务?

尽管规范化的SysV脚本可临时解决问题,但可能存在以下缺陷:

  • 效率低下:串行启动拖慢系统初始化。
  • 依赖管理脆弱:静态依赖无法处理动态资源(如网络连接就绪)。
  • 功能缺失:无自动重启、资源限制、日志聚合等特性。
  • 旧时代产物:sysv相比与system原生服务相对更加老旧,为了兼容system可能会导致各种不便利。


0b7b4f5a-b479-11f0-8ce9-92fbcf53809c.jpg  Systemd原生服务配置最佳实践

1. Systemd服务文件基础

创建/etc/systemd/system/my_service.service。

[Unit]Description=My Custom ServiceAfter=network.target syslog.target# 明确依赖顺序Requires=network.target# 硬依赖(失败则终止)
[Service]Type=simple# 主进程类型(simple/forking)ExecStart=/usr/bin/my_daemon --config /etc/my.confExecStop=/bin/kill -TERM$MAINPID# 可选,默认发送SIGTERMRestart=on-failure# 自动重启策略User=appuser# 降权运行Group=appgroupEnvironment=DEBUG=false# 环境变量
[Install]WantedBy=multi-user.target# 默认启用级别

1.1 服务类型(Type)

0b8b4630-b479-11f0-8ce9-92fbcf53809c.png

1.2 自动重启策略(Restart)

Restart=always# 无条件重启Restart=on-failure# 退出码非0时重启RestartSec=5# 重启前等待时间

1.3 资源限制

MemoryLimit=512M# 内存限制CPUQuota=80%# CPU时间配额LimitNOFILE=65535# 文件描述符数

1.4 日志管理

StandardOutput=journal# 默认输出到JournaldStandardError=journal# 或自定义日志文件(需配合日志轮转)StandardOutput=file:/var/log/my_service.log

2. Systemd服务启动

那么,当我已经创建好了/etc/systemd/system/my_service.service并写好了内容,我该如何启动这个服务?

2.1 重载Systemd配置

sudosystemctl daemon-reload

必须操作:跳过此步骤会导致Systemd无法识别新服务配置!

2.2 启动服务

sudosystemctl start my_service

服务名规则:my_service对应/etc/systemd/system/my_service.service的文件名(无需加.service后缀)。

2.3 检查服务状态

systemctlstatus my_service

关键输出解读:

my_service.service - My Custom Service

Loaded: loaded (/etc/systemd/system/my_service.service; enabled; vendor preset: enabled)

Active: active (running) since Tue 2023-10-10 1500 UTC; 5s ago # 服务已成功运行

Main PID: 1234 (my_daemon)

Tasks: 1 (limit: 4915)

CGroup: /system.slice/my_service.service

└─1234 /usr/bin/my_daemon --config /etc/my.conf

2.4 设置开机自启

sudo systemctlenablemy_service

输出示例:

Createdsymlink/etc/systemd/system/multi-user.target.wants/my_service.service → /etc/systemd/system/my_service.service

2.5 实时查看服务日志

journalctl-u my_service -f

u:过滤特定服务的日志

f:实时跟踪(类似tail -f)

2.6 停止服务

sudosystemctl stop my_service

2.7 重启服务

sudosystemctl restart my_service

3. 完整流程示例

# 创建服务文件sudo nano /etc/systemd/system/my_service.service
# 写入配置内容并保存后...sudo systemctl daemon-reloadsudo systemctl start my_servicesudo systemctlenablemy_servicesystemctl status my_service


0b7b4f5a-b479-11f0-8ce9-92fbcf53809c.jpg  总结:SysV与Systemd对比差异1. 服务启动方式

  • SysV:采用串行启动,服务按运行级别(runlevel)顺序执行脚本,每个服务需等待前一个完成再启动。运行级别通过/etc/rc.d/rcN.d目录下的脚本控制(N为0-6)。
  • Systemd:支持并行启动,通过依赖关系和单元(unit)定义实现多服务同时启动,显著缩短启动时间。例如,基于socket激活机制,服务无需完全启动即可响应请求。

2. 服务管理模型

  • SysV:服务以独立脚本形式存储在/etc/init.d目录,依赖service或chkconfig命令管理。服务状态需手动检查(如ps命令)。
  • Systemd:服务以单元文件(.service)定义,集中在/usr/lib/systemd/system目录,通过systemctl统一管理。支持服务状态监控、日志集成(journalctl)及自动重启策略。

3. 依赖关系处理

  • SysV:依赖关系通过脚本中的条件判断硬编码实现,灵活性差,容易因顺序错误导致启动失败。
  • Systemd:在单元文件中通过After、Requires等指令明确定义依赖关系,系统自动解析并优化启动顺序,确保服务按需加载。

4. 优缺点总结

0b9b2050-b479-11f0-8ce9-92fbcf53809c.png


0ba1f682-b479-11f0-8ce9-92fbcf53809c.jpg  EM系列储能边缘智能网关

EM系列储能边缘智能网关是ZLG致远电子专为新能源储能系统设计的一款高性能、多接口通讯管理设备,可在储能系统应用中作为边缘EMS(能源管理系统)总控、通讯管理机、规约转换器或BAU(电池管理总控)使用。该系列产品集成丰富的外设接口,支持各类BMS、PCS、空调、电表、屏显等设备的通讯传输,且软件上支持RT-Linux、Ubuntu等操作系统,支持IEC-61850/IEC-104/EtherCAT等专用协议,可广泛满足各类储能系统的本地能源管理应用需求。

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

    关注

    1

    文章

    194

    浏览量

    19393
  • 智能网关
    +关注

    关注

    6

    文章

    891

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    原生技术概述 云原生火爆成为升职加薪核心必备

    原生服务可通过分布式部署,大幅提升团队和日常的工作效率,K8s+Docker+Ceph+Envoy+Istio+Prometheus架构,目前是各大主流互联网首选的技术方向,掌握云原生
    的头像 发表于 07-27 10:23 1749次阅读

    Linux使用Systemd管理进程服务

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

    Linux使用Systemd管理进程服务

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

    如何在 Linux 上从 NetworkManager 切换为 systemd

    、隧道和 VLAN。systemd-networkd 目前还不能直接支持无线网络,但你可以使用 wpa_supplicant 服务配置无线适配器,然后把它和 systemd-netwo
    发表于 11-25 10:08

    Dockerfile的最佳实践

    ”微服务一条龙“最佳指南-“最佳实践”篇:Dockerfile
    发表于 07-11 16:22

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

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

    原生技术将是企业落地微服务的优秀伴侣

    随着技术的发展,我们云托管时代逐步的向云原生演进了。所谓云原生,就是将微服务、DevOps的架构理念与云所提供的容器、Serverless无服务
    的头像 发表于 10-08 14:37 2462次阅读

    解析云原生技术发展趋势及实践应用

    华为云TechWave云原生2.0技术峰会在深圳举行。来自金融、制造、物流等各领域的政企精英、技术大牛约300人出席,分享云原生前沿技术发展趋势和行业应用
    发表于 04-01 10:31 1792次阅读

    原生技术的华为云DevOps实践之路

    和重视。 同样,为了应对业务的敏捷发布,应用平台的弹性诉求,商业环境的变化,云原生时代已到来,云原生技术已经应用到企业核心业务。 云原生与DevOps是什么关系?其
    的头像 发表于 12-06 16:52 3314次阅读

    诚邀报名|在开发者大会,洞悉云原生技术落地最佳实践

    2023开放原子开发者大会 . OPENATOM DEVELOPERS CONFERENCE 云原生技术前沿落地实践分论坛 2023.12.16 随着云原生
    的头像 发表于 12-09 18:45 988次阅读

    米哈游大数据云原生实践

    近年来,容器、微服务、Kubernetes 等各项云原生技术的日渐成熟,越来越多的公司开始选择拥抱云原生,并开始将 AI、大数据等类型的企业应用部署运行在云
    的头像 发表于 01-09 10:41 1165次阅读
    米哈游大数据云<b class='flag-5'>原生</b><b class='flag-5'>实践</b>

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

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

    原生AI服务怎么样

    原生AI服务,是指采用云原生的原则和技术来构建、部署和管理人工智能应用及工作负载的方法和模式。那么,云原生AI
    的头像 发表于 01-23 10:47 770次阅读

    Linux网络管理的关键技术最佳实践

    在大型互联网企业中,Linux网络管理是运维工程师的核心技能之一。面对海量服务器、复杂网络拓扑、高并发流量,运维人员需要掌握从基础网络配置到高级网络优化的全套技术栈。本文将结合大厂实际场景,深入解析Linux网络管理的关键
    的头像 发表于 07-09 09:53 683次阅读

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

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