Armbian开机自启脚本实战:从编写到启用完整流程

Armbian开机自启脚本实战:从编写到启用完整流程

1. 引言:为什么需要开机自启脚本?

你有没有遇到过这样的情况:每次重启Armbian设备后,都要手动运行一段命令来点亮LED、配置GPIO引脚,或者启动某个后台服务?重复操作不仅麻烦,还容易遗漏。

这时候,开机自启脚本就派上用场了。它能让你的系统在启动过程中自动执行指定任务,真正实现“一次配置,永久生效”。

本文将带你从零开始,完整走一遍在Armbian上创建并启用开机自启脚本的全流程。无论你是想控制硬件引脚、启动Python程序,还是运行自定义服务,这套方法都适用。

我们不会只讲理论,而是手把手演示:

  • 如何编写一个实际可用的启动脚本
  • 如何选择init.d还是systemd方式
  • 如何验证脚本是否成功运行
  • 常见问题排查技巧

读完这篇,你就能轻松让自己的脚本随系统启动而自动运行。


2. Armbian启动机制解析:systemd vs init.d

2.1 Armbian默认使用systemd

现代Armbian系统基于Debian或Ubuntu,其核心启动管理器是systemd,而不是传统的SysV init。

你可以通过以下命令确认:

ps -p 1 -o comm=

输出结果应该是:

systemd

这说明PID 1进程是systemd,也就是系统的“总指挥”。

2.2 init.d只是兼容层

虽然你还能在/etc/init.d/目录下放脚本,并用update-rc.d注册,但这些操作其实是由systemd通过兼容层来调度执行的。

换句话说:

systemd是导演,init.d脚本只是演员之一,真正的控制权在systemd手里。

2.3 两种方式对比

特性systemd(推荐)init.d(传统)
启动速度支持并行,更快顺序执行,较慢
日志管理内置journalctl需自行重定向
依赖控制支持After/Before等仅靠命名排序
状态监控可查状态、重启策略手动维护
维护性结构清晰,易管理脚本杂乱难追踪

结论:新项目建议优先使用systemd service方式,更稳定、可控、易调试。


3. 编写你的第一个开机脚本

3.1 场景设定:开机点亮LED灯

假设我们有一个连接在GPIO6上的LED灯,希望每次开机时自动点亮。

我们将分两步完成:

  1. 编写基础脚本
  2. 注册为开机服务

3.2 创建脚本文件

先创建一个可执行脚本文件:

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

输入以下内容:

#!/bin/bash # 导出GPIO引脚 echo "6" > /sys/class/gpio/export 2>/dev/null || true echo "7" > /sys/class/gpio/export 2>/dev/null || true echo "8" > /sys/class/gpio/export 2>/dev/null || true # 设置方向 echo "out" > /sys/class/gpio/gpio6/direction echo "in" > /sys/class/gpio/gpio7/direction echo "out" > /sys/class/gpio/gpio8/direction # 设置初始值(点亮LED) echo "1" > /sys/class/gpio/gpio6/value # 清理资源示例(可选) # echo "6" > /sys/class/gpio/unexport

3.3 添加执行权限

保存后赋予执行权限:

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

3.4 手动测试脚本

在正式注册为开机服务前,先手动运行测试:

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

如果LED成功点亮,说明脚本逻辑正确。

注意:部分GPIO可能已被占用或权限受限,建议添加2>/dev/null || true忽略非致命错误。


4. 使用systemd注册为开机服务(推荐方式)

4.1 创建service文件

systemd通过.service文件来管理服务。创建一个新的unit文件:

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

填入以下内容:

[Unit] Description=GPIO Initialization Service After=multi-user.target # 如果依赖网络,可以加上 After=network.target [Service] Type=oneshot ExecStart=/usr/local/bin/gpio-init.sh RemainAfterExit=yes StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target
参数解释:
  • Description: 服务描述,便于识别
  • After: 指定在哪个目标之后启动(multi-user.target表示基本系统就绪)
  • Type=oneshot: 表示该服务执行完即退出,适合初始化脚本
  • RemainAfterExit=yes: 即使脚本结束,也认为服务处于“激活”状态
  • StandardOutput/Error=journal: 输出日志可通过journalctl查看

4.2 启用服务

保存后执行以下命令:

# 重新加载systemd配置 sudo systemctl daemon-reload # 启用开机自启 sudo systemctl enable gpio-init.service # 立即启动服务(无需重启) sudo systemctl start gpio-init.service

4.3 验证服务状态

检查服务是否正常运行:

systemctl status gpio-init.service

正常输出应包含:

● gpio-init.service - GPIO Initialization Service Loaded: loaded (/etc/systemd/system/gpio-init.service; enabled) Active: active (exited) since ...

5. 查看和管理所有开机启动项

5.1 查看已启用的systemd服务

列出所有开机自启的服务:

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

你会看到类似输出:

ssh.service enabled cron.service enabled gpio-init.service enabled ...

5.2 查看当前正在运行的服务

systemctl --type=service --state=running

5.3 查看init.d兼容脚本(如有)

如果你之前使用过update-rc.d,可以用以下命令查看:

ls /etc/rc*.d/ | grep S

输出如:

S01gpio-init.sh S02cron

其中Sxx代表启动顺序。

5.4 查看完整的启动依赖树

了解系统启动时加载了哪些组件:

systemctl list-dependencies multi-user.target

6. 日志查看与故障排查

6.1 使用journalctl查看服务日志

这是systemd最强大的功能之一:

# 查看指定服务的日志 sudo journalctl -u gpio-init.service # 实时查看日志 sudo journalctl -u gpio-init.service -f # 查看最近10条记录 sudo journalctl -u gpio-init.service -n 10

如果脚本有echo输出,这里都能看到。

6.2 常见问题及解决方案

❌ 问题1:脚本没执行,LED未点亮

排查步骤:

  1. 检查服务是否启用:
    systemctl is-enabled gpio-init.service
  2. 检查服务状态:
    systemctl status gpio-init.service
  3. 查看日志是否有报错:
    journalctl -u gpio-init.service
❌ 问题2:提示“Permission denied”或“No such device”

可能是GPIO已被占用,或路径错误。尝试:

  • 更换GPIO编号测试
  • 在脚本中加入延迟(等待内核初始化完成):
    sleep 2
❌ 问题3:服务显示active但无效

确认Type=oneshotRemainAfterExit=yes是否同时设置,否则systemd可能认为服务失败。


7. 进阶技巧与最佳实践

7.1 添加启动延迟(应对硬件初始化慢)

某些设备需要时间初始化,可在service中添加:

[Service] Type=oneshot ExecStartPre=/bin/sleep 3 ExecStart=/usr/local/bin/gpio-init.sh ...

ExecStartPre会在主命令前执行,适合加延时。

7.2 自动重启机制(适用于守护进程)

如果是长期运行的服务,可设置自动重启:

[Service] Type=simple ExecStart=/usr/bin/python3 /home/pi/my_daemon.py Restart=always RestartSec=5

支持alwayson-failureno等策略。

7.3 多脚本统一管理

若需运行多个初始化脚本,建议:

  • 将所有脚本放在/opt/init-scripts/
  • 写一个主入口脚本调用它们
  • 注册一个总的service

例如:

#!/bin/bash # /opt/init-scripts/main-init.sh /opt/init-scripts/setup-gpio.sh /opt/init-scripts/mount-storage.sh /opt/init-scripts/start-monitor.sh

然后把这个主脚本注册为service。

7.4 安全建议

  • 脚本尽量放在/usr/local/bin//opt/,避免被误删
  • 不要在root家目录下存放关键脚本
  • 定期备份service文件
  • 使用chmod 644设置合理权限

8. 总结:掌握Armbian开机自启的核心要点

1. 核心认知升级

Armbian的启动体系本质是systemd为主导,init.d为兼容补充
直接使用systemd service才是现代、高效、可靠的方案。

2. 推荐标准流程

  1. 编写脚本 → 存放于/usr/local/bin/
  2. 添加可执行权限 →chmod +x
  3. 创建.service文件 → 放入/etc/systemd/system/
  4. 加载并启用服务 →daemon-reload+enable
  5. 测试验证 →start+status+journalctl

3. 关键优势回顾

  • 精准控制:可定义启动顺序、依赖关系
  • 日志完备:一键查看运行记录,快速排错
  • 状态可查:随时知道服务是否正常
  • 易于维护:结构清晰,团队协作友好

4. 下一步建议

  • 尝试将你的Python/Node.js应用注册为开机服务
  • systemctl disable <service>禁用不需要的服务以加快启动
  • 学习编写timer unit实现定时任务替代crontab

只要掌握了这一套方法,你就拥有了对Armbian系统启动过程的“掌控力”。无论是做智能家居中枢、工业控制器,还是边缘计算节点,都能游刃有余。


获取更多AI镜像

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

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

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

相关文章

OpCore-Simplify:智能配置工具让黑苹果系统部署变得简单

OpCore-Simplify&#xff1a;智能配置工具让黑苹果系统部署变得简单 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore-Simplify是一款专门为简化…

【MySQL 全量实战手册】从基础到进阶,覆盖所有 SQL 核心操作(附避坑指南 + 实战案例)

目录 前言 一、基础铺垫&#xff1a;测试环境搭建 二、核心分类&#xff1a;SQL 四大类语句全解析 &#xff08;一&#xff09;DDL&#xff1a;数据定义语言&#xff08;表 / 库结构操作&#xff09; 避坑提示&#xff1a; &#xff08;二&#xff09;DML&#xff1a;数据…

精通时间序列数据可视化:PlotJuggler实战指南

精通时间序列数据可视化&#xff1a;PlotJuggler实战指南 【免费下载链接】PlotJuggler The Time Series Visualization Tool that you deserve. 项目地址: https://gitcode.com/gh_mirrors/pl/PlotJuggler 在当今数据驱动的时代&#xff0c;时间序列数据可视化已成为工…

macOS部署革命:OpenCore智能配置终极解决方案

macOS部署革命&#xff1a;OpenCore智能配置终极解决方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore-Simplify是一款革命性的智能配置工具…

Windows 11系统优化终极指南:Win11Debloat完全使用教程

Windows 11系统优化终极指南&#xff1a;Win11Debloat完全使用教程 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本&#xff0c;用于从Windows中移除预装的无用软件&#xff0c;禁用遥测&#xff0c;从Windows搜索中移除Bing&#xff0c;以及执行各种其他更改以简化和…

OpCore Simplify:5步自动化构建完美Hackintosh EFI配置

OpCore Simplify&#xff1a;5步自动化构建完美Hackintosh EFI配置 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 在传统Hackintosh安装过程中&#…

性能优化:Sambert语音合成速度提升技巧大公开

性能优化&#xff1a;Sambert语音合成速度提升技巧大公开 1. 引言&#xff1a;为什么语音合成速度至关重要 在实际应用中&#xff0c;语音合成&#xff08;TTS&#xff09;的响应速度直接影响用户体验。无论是智能客服、有声读物生成&#xff0c;还是虚拟主播实时播报&#x…

kotlin 延迟属性

直接测试下&#xff1a;val myZuoYouMing: String by lazy {println("万里长城永不倒")println("千里黄河水滔滔")"江山秀丽叠彩峰岭""问我国家哪像染病" }fun main() {val zym myZuoYouMingprintln(zym)println("...........&q…

工作笔记 - Liam

麒麟信安探针关闭验时: echo "NO CHECK-SIG" > /etc/gd_advisor/.check cat /etc/gd_advisor/.check 南瑞继保探针 切换为root,进入目录/usr/local/sagent-3000-isg; 修改白名单、重启之间都要停止进程;…

Hackintosh配置新纪元:OpCore-Simplify如何让复杂变简单

Hackintosh配置新纪元&#xff1a;OpCore-Simplify如何让复杂变简单 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 想要在普通PC上体验macOS的魅力吗…

FSMN-VAD降本方案:低成本GPU部署语音端点检测案例

FSMN-VAD降本方案&#xff1a;低成本GPU部署语音端点检测案例 1. FSMN-VAD 离线语音端点检测控制台 你是否还在为长音频中夹杂大量静音片段而烦恼&#xff1f;手动切分效率低、成本高&#xff0c;而传统VAD&#xff08;语音端点检测&#xff09;服务又依赖昂贵的云API或高性能…

终极位置模拟完整指南:钉钉助手让你随时随地轻松打卡

终极位置模拟完整指南&#xff1a;钉钉助手让你随时随地轻松打卡 【免费下载链接】XposedRimetHelper Xposed 钉钉辅助模块&#xff0c;暂时实现模拟位置。 项目地址: https://gitcode.com/gh_mirrors/xp/XposedRimetHelper 在当今快节奏的工作环境中&#xff0c;位置模…

5个关键步骤:用LLM Guard打造坚不可摧的AI安全防护体系

5个关键步骤&#xff1a;用LLM Guard打造坚不可摧的AI安全防护体系 【免费下载链接】llm-guard The Security Toolkit for LLM Interactions 项目地址: https://gitcode.com/gh_mirrors/llm/llm-guard 在AI技术迅猛发展的今天&#xff0c;如何确保大型语言模型(Large La…

OpCore-Simplify终极指南:5分钟完成专业级黑苹果EFI配置

OpCore-Simplify终极指南&#xff1a;5分钟完成专业级黑苹果EFI配置 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 想要在普通PC上体验macOS系统&…

如何用虚拟桌面伴侣让枯燥工作变得生动有趣?

如何用虚拟桌面伴侣让枯燥工作变得生动有趣&#xff1f; 【免费下载链接】BongoCat 让呆萌可爱的 Bongo Cat 陪伴你的键盘敲击与鼠标操作&#xff0c;每一次输入都充满趣味与活力&#xff01; 项目地址: https://gitcode.com/gh_mirrors/bong/BongoCat 你是否曾感到长时…

BongoCat桌面宠物定制全攻略:从零打造专属Live2D猫咪模型

BongoCat桌面宠物定制全攻略&#xff1a;从零打造专属Live2D猫咪模型 【免费下载链接】BongoCat 让呆萌可爱的 Bongo Cat 陪伴你的键盘敲击与鼠标操作&#xff0c;每一次输入都充满趣味与活力&#xff01; 项目地址: https://gitcode.com/gh_mirrors/bong/BongoCat 想要…

SAM 3一键部署:小白也能做的智能抠图实战

SAM 3一键部署&#xff1a;小白也能做的智能抠图实战 1. 引言&#xff1a;为什么你需要了解SAM 3&#xff1f; 你有没有遇到过这样的问题&#xff1a;想把一张照片里的人或物体单独抠出来&#xff0c;但用PS太费时间&#xff0c;手动描边又不够精准&#xff1f;现在&#xff…

Windows 11系统精简神器:Win11Debloat一键优化完整攻略

Windows 11系统精简神器&#xff1a;Win11Debloat一键优化完整攻略 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本&#xff0c;用于从Windows中移除预装的无用软件&#xff0c;禁用遥测&#xff0c;从Windows搜索中移除Bing&#xff0c;以及执行各种其他更改以简化和…

OpCore Simplify智能更新系统:让黑苹果始终保持最新状态

OpCore Simplify智能更新系统&#xff1a;让黑苹果始终保持最新状态 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore Simplify作为一款专为Hack…

OpenCore Simplify黑苹果强力助手:3步搞定完美EFI配置

OpenCore Simplify黑苹果强力助手&#xff1a;3步搞定完美EFI配置 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 传统黑苹果配置过程复杂繁琐&#x…