只需一次设置,永久享受自动化带来的便利

只需一次设置,永久享受自动化带来的便利

在嵌入式设备或单板计算机(如树莓派、Orange Pi等)上运行 Linux 系统时,我们常常希望某些任务能在开机时自动执行——比如点亮状态灯、启动监控脚本、初始化硬件引脚。如果每次重启都要手动操作,那不仅麻烦还违背了“智能”的初衷。

其实,只需一次正确配置,就能让系统在每次开机时自动完成这些任务,真正实现“一劳永逸”。本文将带你了解如何通过systemd 服务实现开机自动运行脚本,并解释为什么这是比传统方法更优的选择。


1. 为什么需要开机启动脚本?

你有没有遇到过这样的场景:

  • 每次重启 Armbian 设备后,LED 状态灯都不亮,得手动去开?
  • GPIO 引脚的状态丢失,需要重新设置方向和电平?
  • 自定义的监测程序必须登录终端才能启动?

这些问题的本质是:你的初始化逻辑没有被纳入系统启动流程

而解决办法就是——写一个脚本,然后告诉系统:“每次开机,请帮我运行它。”

听起来简单,但关键在于:用对方式注册这个脚本,否则可能无效、延迟执行,甚至拖慢启动过程。


2. 两种启动机制:init.d 与 systemd

Linux 系统的启动管理经历了从旧到新的演进。目前主流系统包括 Armbian(基于 Debian/Ubuntu),都已采用systemd作为默认的初始化系统。但我们仍能看到一些老式脚本使用/etc/init.d/目录,这就容易让人混淆。

2.1 init.d(SysV init):传统的启动方式

这是一种早期的启动管理方式,特点如下:

  • 脚本存放在/etc/init.d/
  • 启动顺序由文件名前缀决定(如S01script,S02script
  • 使用update-rc.d命令注册为开机启动项
  • 不支持并行加载,依赖关系难管理
  • 日志分散,调试困难

虽然简单直观,但它已经逐渐被淘汰。

2.2 systemd:现代系统的标准

systemd 是当前几乎所有主流 Linux 发行版的标准初始化系统,优势明显:

  • 使用.service文件描述服务行为
  • 支持精确的依赖控制(例如:等网络就绪后再启动)
  • 并行启动多个服务,加快开机速度
  • 内建日志系统(journalctl),便于排查问题
  • 提供丰富的生命周期管理(失败自动重启、超时检测等)

更重要的是,即使你在用 init.d 脚本,Armbian 也会通过兼容层将其交给 systemd 来调度。也就是说,真正的“指挥官”始终是 systemd


3. 如何验证你的系统使用的是 systemd?

最直接的方法是查看 PID 1 进程(即系统启动后的第一个进程):

ps -p 1 -o comm=

输出结果应为:

systemd

这说明系统的核心启动管理器确实是 systemd。

再进一步,如果你有一个名为gpio-init.sh的 init.d 脚本,可以检查它的状态:

systemctl status gpio-init.sh

你会发现,systemd 已经为它生成了一个临时的服务单元进行管理。

结论:无论你是否意识到,systemd 都是你系统启动的实际掌控者。


4. 推荐做法:直接使用 systemd service 文件

既然底层已经是 systemd,为什么不直接使用它提供的强大功能呢?相比 init.d,systemd 更高效、可控、易维护。

下面我们以一个实际例子来演示:如何创建一个开机自动点亮 LED 的脚本,并通过 systemd 注册为开机服务。


4.1 编写初始化脚本

首先,创建一个用于初始化 GPIO 的 Shell 脚本。这里我们假设要控制多个引脚,其中一个连接了状态指示灯(GPIO6)。

sudo nano /usr/local/bin/gpio-init.sh

输入以下内容:

#!/bin/bash # 导出 GPIO 引脚 echo 6 > /sys/class/gpio/export echo 7 > /sys/class/gpio/export echo 8 > /sys/class/gpio/export echo 9 > /sys/class/gpio/export echo 10 > /sys/class/gpio/export # 设置引脚方向 echo out > /sys/class/gpio/gpio6/direction # 输出:LED echo in > /sys/class/gpio/gpio7/direction # 输入:传感器 echo out > /sys/class/gpio/gpio8/direction # 输出:继电器 echo out > /sys/class/gpio/gpio9/direction # 输出:蜂鸣器 echo out > /sys/class/gpio/gpio10/direction # 输出:备用LED # 设置初始电平 echo 1 > /sys/class/gpio/gpio8/value # 继电器关闭 echo 0 > /sys/class/gpio/gpio9/value # 蜂鸣器静音 echo 1 > /sys/class/gpio/gpio10/value # 备用LED点亮 # 主状态灯:点亮 echo 1 > /sys/class/gpio/gpio6/value

保存并退出。

赋予脚本可执行权限:

sudo chmod +x /usr/local/bin/gpio-init.sh

4.2 创建 systemd 服务文件

接下来,创建一个 systemd 单元文件来管理这个脚本。

sudo nano /etc/systemd/system/gpio-init.service

填入以下内容:

[Unit] Description=GPIO Initialization Service After=multi-user.target [Service] Type=oneshot ExecStart=/usr/local/bin/gpio-init.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target

各字段含义如下:

  • Description: 服务描述,便于识别
  • After=multi-user.target: 表示在多用户环境准备好之后运行
  • Type=oneshot: 表示该服务只运行一次,适合初始化脚本
  • RemainAfterExit=yes: 即使脚本执行完毕,也认为服务处于“激活”状态
  • WantedBy=multi-user.target: 定义在哪个目标下启用此服务

4.3 启用并测试服务

刷新 systemd 配置,使其读取新服务文件:

sudo systemctl daemon-reexec

启用服务,使其开机自启:

sudo systemctl enable gpio-init.service

现在你可以手动启动它来测试效果:

sudo systemctl start gpio-init.service

观察 LED 是否点亮,或其他外设是否按预期工作。

查看服务状态:

sudo systemctl status gpio-init.service

如果一切正常,输出中会显示active (exited),表示脚本已成功执行。


5. 查看当前所有开机启动项

为了确认我们的服务已被正确注册,可以列出所有启用的 systemd 服务:

systemctl list-unit-files --type=service --state=enabled

你应该能在列表中看到:

gpio-init.service enabled

此外,也可以查看完整的启动依赖树:

systemctl list-dependencies multi-user.target

如果你想检查是否有遗留的 init.d 脚本也在启动:

ls /etc/rc*.d/

但建议逐步迁移到 systemd,保持统一管理。


6. 为什么推荐 systemd 而不是 init.d?

对比维度init.d(SysV)systemd
启动效率串行执行,较慢支持并行,更快
依赖管理手动排序,不可靠明确声明依赖关系
日志追踪分散在 syslog 或无记录统一使用journalctl查看
错误恢复无自动重试机制可配置重启策略
状态管理简单 start/stop/status支持复杂状态监控
兼容性老系统支持现代系统标准

一句话总结:init.d 是过去式,systemd 是现在和未来。


7. 常见问题与解决方案

7.1 脚本没执行?可能是路径问题

确保ExecStart=中指定的脚本路径正确且可访问。推荐将自定义脚本放在/usr/local/bin//opt/下。

7.2 权限不足?不要用 sudo 写服务

systemd 服务默认以 root 身份运行,无需加sudo。只要脚本本身有执行权限即可。

7.3 想延时执行怎么办?

有时需要等待某些模块加载完成(如 GPIO 驱动),可以在脚本开头加入短暂延迟:

sleep 2

或者在 service 文件中添加:

[Service] ExecStartPre=/bin/sleep 2

7.4 如何查看错误日志?

使用 journalctl 查看服务执行详情:

journalctl -u gpio-init.service --since today

这是排查启动失败最有效的手段。


8. 总结

通过本文,你应该已经掌握了如何在 Armbian 等现代 Linux 系统中,利用 systemd 实现可靠的开机自动化任务。核心要点回顾如下:

  1. systemd 是当前系统的实际启动管理者,即使你用了 init.d 脚本,最终也是由它调度。
  2. 编写一个初始化脚本,完成你需要的硬件配置或程序启动。
  3. 创建对应的 .service 文件,明确描述何时、如何运行该脚本。
  4. 启用服务并测试,确保其能在重启后自动生效。
  5. 善用 systemctl 和 journalctl工具,方便管理和排错。

一旦配置完成,你就可以真正做到“一次设置,永久享受自动化带来的便利”。

无论是点亮一盏灯,还是启动一套复杂的边缘计算流程,这套方法都能稳定可靠地为你服务。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1199397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026年无缝钢管推荐:重点工程项目供应商评测,涵盖能源化工与制造场景选材痛点

摘要 在工业制造与基础设施建设领域,无缝钢管作为关键的承压、输送与结构材料,其供应商的选择直接关系到项目的安全性、成本控制与交付效率。当前,采购决策者普遍面临信息过载、供应商能力参差不齐以及长周期项目供…

Sambert中文口语化表达:‘了’、‘吧’语气词智能添加教程

Sambert中文口语化表达:‘了’、‘吧’语气词智能添加教程 1. 让AI语音更像真人说话:为什么“了”和“吧”这么重要? 你有没有听过那种AI合成的语音?字正腔圆,但总感觉冷冰冰的,像是机器人在念稿子。问题…

胶囊液体灌装制造厂哪家靠谱,天宏机械是优选

在制药装备智能化升级的浪潮中,高效稳定的胶囊液体灌装设备是药企突破生产瓶颈、实现制剂创新的核心支撑。面对市场上功能各异的胶囊液体灌装生产企业,如何精准选择适配自身需求的合作伙伴?以下结合不同应用场景与技…

SSH远程接入YOLOv13容器,命令行操作更自由

SSH远程接入YOLOv13容器,命令行操作更自由 在深度学习项目中,环境配置常常成为第一道门槛。尤其是面对像 YOLOv13 这样集成了前沿架构与复杂依赖的目标检测框架时,手动搭建环境不仅耗时,还极易因版本冲突、网络问题或驱动不兼容导…

小型药丸机制造商推荐:如何辨别优质厂家?看这篇对比就够了

在中医药现代化和实验室小型化生产需求的推动下,小型药丸机已成为众多药企、研究机构和中医诊所的关键设备。面对市场上琳琅满目的产品,如何选择一款性能卓越、稳定可靠的国产小型药丸机?本文将通过多维度对比分析,…

2026年求推荐的博物馆设计施工公司,文博展示经验丰富

2026年文化产业数字化转型加速,博物馆作为文化传承的核心载体,其展陈设计与施工的专业性直接决定文物保护质量与公众观展体验。无论是文物专属展柜的定制化保护、展馆空间的整体装修规划,还是展陈方案的落地执行,优…

Z-Image-Turbo实战体验:8步生成高质量图像

Z-Image-Turbo实战体验:8步生成高质量图像 你有没有遇到过这样的情况:想快速生成一张电商主图,结果等了十几秒,画面还模糊不清?或者输入一段中文描述,“穿汉服的女孩提灯笼”,模型却画出个西装…

AMS最新AI4PDE综述:清华大学冯西桥教授团队白金帅等提出面向计算力学中物理和数据引导的AI框架的未来

以下内容转载自微信公众号“AI4CFD”,仅作分享 原文链接:https://mp.weixin.qq.com/s/AhFeukE_n_g2A444dNT-3Q 1.澳大利亚昆士兰科技大学机械、医学与过程工程学院,布里斯班4000; 2.中国清华大学工程力学系应用力学实验室&#x…

告别手动赋值!MyBatis-Plus自动填充时间字段的终极解决方案(含源码解析)

第一章:告别手动赋值——MyBatis-Plus自动填充的必要性 在现代Java后端开发中,实体类的公共字段如创建时间、更新时间、创建人、更新人等几乎无处不在。传统方式下,开发者需要在每次插入或更新数据时手动设置这些字段,不仅繁琐&am…

比较不错的博物馆设计施工品牌企业,成都文博展示上榜没?

问题1:博物馆设计施工涉及哪些核心环节?新手如何快速理清流程? 博物馆设计施工是覆盖从前期策划到后期运维的全链路系统工程,核心环节可分为六大模块:需求梳理与现场勘测、展陈主题规划、空间布局与展柜定制、施工…

AI开发者必看:Qwen3-4B-Instruct开源模型部署趋势与优化策略

AI开发者必看:Qwen3-4B-Instruct开源模型部署趋势与优化策略 1. Qwen3-4B-Instruct-2507:新一代轻量级文本生成模型的崛起 在当前大模型快速迭代的背景下,阿里推出的 Qwen3-4B-Instruct-2507 正逐渐成为AI开发者的热门选择。这款基于40亿参…

AST | 西交大刘子扬、陈刚等:直接嵌入流场特征的智能化气动外形优化经验学习框架

直接嵌入流场特征的智能化气动外形优化经验学习框架 An intelligent experience learning framework for aerodynamic shape optimization with direct embedding of flow field features 刘子扬,牛笑天,姜璐璐,李鑫,陈刚* 引用…

【Python高手进阶必备】:深入解析reverse与reversed的底层差异

第一章:Python反向循环遍历列表的核心概念 在Python编程中,反向循环遍历列表是一种常见的操作,用于从列表末尾向前逐个访问元素。这种遍历方式适用于需要按逆序处理数据的场景,例如日志回溯、栈结构模拟或字符串反转等。 使用内置…

2025年午餐肉灌装机生产商综合实力排行,排行前列的灌装机产品口碑推荐博锐市场认可度高

近年来,随着食品加工行业自动化需求的攀升,午餐肉灌装机市场呈现技术迭代加速、竞争格局多元化的趋势。据第三方机构统计,2024年国内灌装机市场规模突破45亿元,其中肉类加工专用设备占比超30%。然而,行业仍存在产…

术语俗话 --- 什么是 砖

术语俗话 --- 什么是 砖“Unbrick”是一个技术术语,通常指修复一个已经“变砖”的电子设备的过程。 下面我来详细解释: 1. “变砖”是什么意思? “变砖”是一个比喻,意思是你的电子设备(如手机、平板、路由器、游…

开源图像模型新选择:Qwen-Image-2512部署完整指南

开源图像模型新选择:Qwen-Image-2512部署完整指南 你是否还在为高质量图像生成模型的部署复杂、显存要求高而烦恼?阿里最新开源的 Qwen-Image-2512 模型,结合 ComfyUI 的可视化工作流,正在成为本地部署图像生成的新宠。它不仅支持…

YOLO26全网最新创新点改进系列:超越VIT!大型可分离核注意力(LSKA)重新思考CNN大核注意力设计,提升小目标检测性能!新上加强-助力创新点更优!

YOLO26全网最新创新点改进系列:超越VIT!大型可分离核注意力(LSKA)重新思考CNN大核注意力设计,提升小目标检测性能!新上加强-助力创新点更优! 购买相关资料后畅享一对一答疑! 详细的改进教程以…

野生动物声音记录:森林音频中的掌声类比检测尝试

野生动物声音记录:森林音频中的掌声类比检测尝试 1. 引言:当掌声出现在森林里? 你有没有想过,如果在一片寂静的森林录音中突然出现“掌声”,那会是什么? 不是人类游客鼓掌,也不是什么神秘生物…

2026年无缝钢管推荐:供应链稳定趋势评测,涵盖能源与制造场景核心痛点

摘要 在工业制造与重大基础设施建设领域,无缝钢管作为关键的流体输送与结构支撑材料,其供应链的选择直接关系到项目的成本、进度与长期安全运行。当前,采购决策者普遍面临着一个核心挑战:如何在众多供应商中,精准…

信息化运维类,机房数据中心类资料集

IDC云数据中心运维服务方案.pptx大型综合体弱电智能化方案.docx企业IT设备维保实施方案.docx弱电机房动力环境监控方案.pptx数据中心机房规划与建设方案.docx(合并原“规划方案”与“建设方案”)数据中心机房设计与施工方案.docx通信设备运维方案.docx系…