yocto: 13-systemd Service
第3课自己写 systemd Service —— 掌握开机服务摘要本教程详细介绍了如何在 Raspberry Pi 上创建自定义 systemd 服务实现开机自动运行程序。内容包括systemd 基本概念、service 文件结构解析、Yocto 集成方法、recipe 编写要点以及完整的构建、部署和验证流程。通过 hello.service 示例展示了从编写服务文件到系统集成的完整实践过程。自己写一个 service让 Raspberry Pi 开机自动运行自己的程序。学习完成后你就会理解什么是 systemd什么是 serviceservice 文件长什么样Yocto 如何安装 serviceYocto 如何自动 enable service最终效果Pi 开机 ↓ systemd ↓ 启动 hello.service ↓ 执行 /usr/bin/hello这就是现代 Linux 的标准启动方式。所以要做两件事1.增加systemd serice 服务2.增加hello-systemd 服务一、什么是 systemd以前 Linux 使用init后来使用SysV init现在几乎所有 Linux 都使用systemd可以理解成systemd 所有程序几乎都是它启动。例如- network -ssh- dbus - bluetooth - nginx -docker- 自己的程序全部都是 systemd 管理。二、什么是 service例如SSH 服务 sshd.service网络 NetworkManager.service时间同步 systemd-timesyncd.service我们也可以写hello.service开机执行/usr/bin/hello三、service 文件在哪里一般放/lib/systemd/system/或者 /usr/lib/systemd/system/Yocto 使用变量${systemd_system_unitdir}例如${systemd_system_unitdir}/hello.service四、service 文件格式建立 hello.service内容[Unit]DescriptionHello Demo ServiceAfternetwork.target[Service]TypesimpleExecStart/usr/bin/helloRestartalways[Install]WantedBymulti-user.target这是最经典的 service。五、逐行解释[Unit]DescriptionHello Demo Service # 描述这个服务。AfterAfternetwork.target # 网络启动完成以后 再启动 hello 不是依赖只是启动顺序。[Service]真正运行程序。Typesimple最常见。simple意思ExecStart 启动以后 程序一直运行ExecStart真正执行ExecStart/usr/bin/hello # systemd 会执行/usr/bin/helloRestartRestartalways程序退出重新启动 非常适合 daemon。[Install]WantedBymulti-user.target意思进入正常多用户模式时启动。可以理解成开机以后自动启动六、把 service 放进 recipe目录hello-systemd/ ├── hello-systemd.bb ├── hello └── hello.servicehello.service[Unit]DescriptionHello Demo ServiceAfternetwork.target[Service]TypesimpleExecStart/usr/bin/helloRestartalways[Install]WantedBymulti-user.targethello脚本#!/bin/shwhiletruedoechoHello Systemdsleep5done七、Recipe – hello-systemd.bbSUMMARYHello systemd demoLICENSEMITLIC_FILES_CHKSUMfile://LICENSE;md5f4fa7fd56aac72279ad21a112915ca87inherit systemd SRC_URI\ file://hello \ file://hello.service \ file://LICENSES${WORKDIR}do_install(){install-d${D}${bindir}install-m0755${WORKDIR}/hello${D}${bindir}/helloinstall-d${D}${systemd_system_unitdir}install-m0644${WORKDIR}/hello.service\${D}${systemd_system_unitdir}/hello.service}SYSTEMD_SERVICE:${PN}hello.serviceSYSTEMD_AUTO_ENABLEenableFILES:${PN}\${bindir}/hello \${systemd_system_unitdir}/hello.service \ 八、重点解释 Recipeinherit systemd告诉 BitBake我要安装 systemd service。 它会引入处理 systemd 服务所需的类和打包逻辑。SYSTEMD_SERVICE:${PN}告诉 Yocto这个 package 的 service 是hello.service如果一个包有多个服务也可以写SYSTEMD_SERVICE:${PN} “hello.servicemonitor.service”SYSTEMD_AUTO_ENABLE “enable”构建镜像时systemctl enable hello.service会自动完成实际上是在 rootfs 中创建相应的符号链接因此系统首次启动时服务就是启用状态。如果改成SYSTEMD_AUTO_ENABLE “disable”则安装了 service 文件但不会自动启用。九、添加systemd usrmerge 特性推荐在 local.conf 中同时添加 usrmergevi ~/yocto/build-rpi2/conf/local.confbash修改为bitbake# # 切换到 systemd 作为 init 管理器# DISTRO_FEATURES:append systemd usrmergeVIRTUAL-RUNTIME_init_managersystemdVIRTUAL-RUNTIME_initscriptssystemd-compat-unitsDISTRO_FEATURES_BACKFILL_CONSIDEREDsysvinitVIRTUAL-RUNTIME_syslogsystemd-journaldbitbake core-image-minimal-ccleansstate# seemd clean tmp, so need long time to rebuildbitbake core-image-minimal十构建并加入镜像编译bitbake hello-systemd加入镜像IMAGE_INSTALL:append hello-systemd位置1core-image-minimal.bbappend最佳实践 ✅IMAGE_INSTALL:append network-config hello-script mypackage mypackage-config hello-systemd位置2local.conf快速测试位置3自定义 Image Recipe最灵活重新生成镜像bitbake core-image-minimal写入 SD 卡并启动 Raspberry Pi。十一、验证服务查看是否已启用systemctl is-enabled hello.service期望输出enabled查看状态systemctl status hello.service可能看到● hello.service Loaded: loaded Active: active(running)查看日志journalctl-uhello.service如果脚本每 5 秒输出一次 Hello Systemd日志中就会看到相应内容。May2918:48:29 raspberrypi2 systemd[1]: Started Hello Demo Service. May2918:48:29 raspberrypi2 hello[219]: Hello Systemd ├── hello-systemd │ ├── files │ │ ├── hello │ │ ├── hello.service │ │ └── LICENSE │ └── hello-systemd.bb十二、常见问题本课实验推荐为了真正掌握 systemd建议按下面顺序完成三个小实验1.基础服务编写 hello.service每 5 秒打印一条日志确认开机自动启动。2.故障恢复将脚本改为运行 10 秒后退出观察 Restartalways 是否自动拉起服务。3.启动顺序修改 After如 network.target结合 systemctl list-dependencies 和日志观察服务启动顺序。完成这三步后你不仅会知道如何在 Yocto 中安装和启用一个 systemd 服务还会理解 Linux 开机服务管理的基本工作方式。这也是后续开发网络服务、守护进程daemon和后台应用的基础。

相关新闻

yocto: 15-image

yocto: 15-image

第5课:是 Yocto 学习路线中最重要的一课之一。 到目前为止,你已经学会了: 1.建立 Build Environment 2.自己写 recipe(hello、C 程序、script) 3.do_install 4.Package(PACKAGES、FILES) 5.把 p…

2026/9/30 2:25:46 阅读更多 →
15分钟跑通产品发现闭环:pm-skills 的 /discover 新手实战

15分钟跑通产品发现闭环:pm-skills 的 /discover 新手实战

15分钟跑通产品发现闭环:pm-skills 的 /discover 新手实战 【免费下载链接】pm-skills PM Skills Marketplace: 100 agentic skills, commands, and plugins — from discovery to strategy, execution, launch, and growth. 项目地址: https://gitcode.com/GitHu…

2026/9/30 2:24:46 阅读更多 →
华为鸿蒙免费主题壁纸工具—小羊免费壁纸

华为鸿蒙免费主题壁纸工具—小羊免费壁纸

改天亮屏想换一张,收藏夹却糊成一堆,锁屏用的、桌面用的、周末才想看的全搅在一起——翻半天才找到昨天顺眼的那张,兴致也散了。想换图的工具又常先催会员、弹广告,手又缩回去了。我做成了 小羊免费壁纸——喜欢的图分开放&#x…

2026/9/30 2:24:46 阅读更多 →

最新新闻

组网课设实战:从VLAN规划到单臂路由验证

组网课设实战:从VLAN规划到单臂路由验证

简介:这份文档是西南交通大学计算机网络课程设计《组网技术》的完整范本,面向高校计算机相关专业学生,用于完成局域网组建、网络设备选型与接入方案设计等综合作业。文档从设计目的与要求出发,依次给出硬件方案、软件方案和网络接…

2026/9/30 4:15:51 阅读更多 →
AI模型推理优化实战:从PyTorch到TensorRT/vLLM的端到端落地指南

AI模型推理优化实战:从PyTorch到TensorRT/vLLM的端到端落地指南

1. 项目概述:Model-Optimizer 不是工具名,而是一类工程实践的统称“Model-Optimizer”这个标题乍看像某个开源项目或商业软件的名字,但结合NVIDIA、TensorRT-LLM、vLLM、PT文件转换、Docker镜像部署等高频热词,它实际指向的是一个…

2026/9/30 4:15:51 阅读更多 →
C++进阶路线:从环境配置、语法深挖到算法模板与崩溃调试

C++进阶路线:从环境配置、语法深挖到算法模板与崩溃调试

1. 从热搜词看C第二阶段的真实主线C学习笔记写到第二篇,我特意反反复复看了后台那一串关联搜索词。说实话,第一眼扫过去会觉得乱:又是环境配置,又是算法模板,中间还夹着一个“access violation c0000005”这种报错词。…

2026/9/30 4:15:51 阅读更多 →
Model-Optimizer:大模型推理端到端优化实战指南

Model-Optimizer:大模型推理端到端优化实战指南

1. “Model-Optimizer”不是工具名,而是工程共识的具象化表达很多人第一次看到“Model-Optimizer”这个词,下意识会去GitHub搜一个叫这个名字的开源项目——结果什么也找不到。我也试过,翻了三页issue、扫了五个主流模型压缩仓库的README&…

2026/9/30 4:15:51 阅读更多 →
DeepSeekEmbedding实战:从语义搜索到相似度匹配的完整链路

DeepSeekEmbedding实战:从语义搜索到相似度匹配的完整链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 4:15:51 阅读更多 →
NVIDIA GPU上的模型压缩三要素:剪枝、量化与蒸馏协同优化

NVIDIA GPU上的模型压缩三要素:剪枝、量化与蒸馏协同优化

1. 项目概述:Model-Optimizer不是工具箱,而是一套可落地的模型瘦身方法论“Model-Optimizer”这个名字听起来像某个开源库或GUI软件,但实际它根本不是现成的黑盒工具——它是我在过去三年里,为多个边缘部署、端侧推理和低成本云服…

2026/9/30 4:14:51 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 8:16:59 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/29 8:24:48 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →