一看就会的开机启动配置,适合所有Armbian初学者
1. 开机启动到底是什么?为什么你需要它?
你有没有遇到过这种情况:每次重启 Armbian 设备(比如香橙派、树莓派),都要手动运行一段脚本,比如点亮一个 LED、设置 GPIO 引脚、启动某个程序?重复操作不仅麻烦,还容易忘记。
那有没有办法让系统“自己动手”?当然有——这就是开机启动配置。
简单说,开机启动就是:你写好一段命令或脚本,告诉系统:“每次开机时,自动帮我执行它。”
对初学者来说,这听起来可能有点“高级”,但其实只要搞懂两个关键词:systemd和init.d,再跟着步骤一步步来,真的是一看就会。
本文专为 Armbian 新手设计,不讲复杂原理,只讲你能用、能懂、能落地的方法。无论你是想点个灯、跑个 Python 脚本,还是自动挂载磁盘,都能照着做出来。
2. Armbian 启动机制:systemd 还是 init.d?
2.1 先搞清楚:你的 Armbian 用的是什么?
现在的 Armbian 基于 Debian 或 Ubuntu,默认使用systemd作为启动管理器。你可以用一句话理解:
systemd 是现代 Linux 的“总指挥”,负责在开机时安排所有服务的启动顺序。
虽然老式的init.d脚本还能用,但它其实是被systemd“兼容支持”的——也就是说,真正干活的还是 systemd。
2.2 验证你的系统是不是 systemd
打开终端,输入:
ps -p 1 -o comm=如果输出是:
systemd那就说明你的系统确实是 systemd 在掌管全局。这是后续操作的基础。
3. 两种方式实现开机启动:init.d vs systemd
虽然最终都是 systemd 在执行,但我们可以用两种方式“提交任务”:
| 方法 | 位置 | 适合谁 | 推荐度 |
|---|---|---|---|
init.d脚本 | /etc/init.d/ | 完全新手,只想快速搞定 | ☆ |
systemd服务 | /etc/systemd/system/*.service | 想长期维护、更稳定 |
我们先从最简单的init.d开始,再过渡到推荐的systemd方式。
4. 方法一:用 init.d 脚本快速上手(适合新手试水)
4.1 创建你的启动脚本
假设你想在开机时点亮一个连接在 GPIO6 的 LED。
创建脚本文件:
sudo nano /etc/init.d/gpio-init.sh粘贴以下内容:
#!/bin/bash # 导出 GPIO 引脚 echo "6" > /sys/class/gpio/export sleep 0.1 echo "out" > /sys/class/gpio/gpio6/direction echo "1" > /sys/class/gpio/gpio6/value # 可以继续添加其他 GPIO 设置4.2 给脚本加执行权限
sudo chmod +x /etc/init.d/gpio-init.sh4.3 注册为开机启动
使用update-rc.d命令注册:
sudo update-rc.d gpio-init.sh defaults这样系统就会在启动时自动调用这个脚本。
4.4 测试是否生效
你可以手动运行测试:
sudo /etc/init.d/gpio-init.sh如果 LED 亮了,说明脚本没问题。重启后应该会自动点亮。
5. 方法二:用 systemd 服务(推荐长期使用)
虽然init.d简单,但systemd更强大、更可靠。它支持:
- 自动重启失败的服务
- 查看详细日志
- 控制启动依赖(比如等网络就绪后再运行)
5.1 把脚本移到标准位置
先把脚本移到/usr/local/bin/,这是存放本地程序的标准目录:
sudo mv /etc/init.d/gpio-init.sh /usr/local/bin/gpio-init.sh sudo chmod +x /usr/local/bin/gpio-init.sh5.2 创建 systemd 服务文件
新建一个 service 文件:
sudo nano /etc/systemd/system/gpio-init.service写入以下内容:
[Unit] Description=GPIO 初始化脚本 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:加入多用户模式的启动流程
5.3 启用并启动服务
加载配置:
sudo systemctl daemon-reload启用开机自启:
sudo systemctl enable gpio-init.service立即运行一次(不用重启):
sudo systemctl start gpio-init.service5.4 检查运行状态
查看服务是否成功:
sudo systemctl status gpio-init.service如果看到active (exited),并且没有报错,说明一切正常。
你还可以用journalctl查看详细日志:
sudo journalctl -u gpio-init.service6. 如何查看当前有哪些开机启动项?
想知道系统里已经设置了哪些自动启动的服务?用这几个命令就够了。
6.1 查看所有启用的 systemd 服务
systemctl list-unit-files --type=service --state=enabled你会看到类似:
ssh.service enabled cron.service enabled gpio-init.service enabled这些都会在开机时自动启动。
6.2 查看 init.d 脚本的注册情况
如果你用了update-rc.d,可以用:
ls /etc/rc*.d/输出可能像:
/etc/rc2.d/S01gpio-init.sh /etc/rc2.d/S02cronSxx表示启动顺序,数字越小越早执行。
6.3 查看启动依赖关系(进阶)
想看看系统启动时都加载了啥?
systemctl list-dependencies multi-user.target这会列出进入“多用户模式”时加载的所有服务和目标。
7. 常见问题与解决方法
7.1 脚本没执行?可能是路径不对
确保ExecStart=指向的脚本路径正确,并且有执行权限。
检查命令:
ls -l /usr/local/bin/gpio-init.sh应该看到-rwxr-xr-x权限。
7.2 提示“Permission denied”?
GPIO 操作需要 root 权限。而 systemd 服务默认以 root 运行,所以没问题。
但如果你手动测试脚本,记得加sudo:
sudo /usr/local/bin/gpio-init.sh7.3 脚本执行太快,GPIO 还没准备好?
加个短暂延迟:
sleep 0.5放在关键操作前,比如导出 GPIO 后。
7.4 想让脚本开机后 10 秒再运行?
可以在 service 文件中加:
[Service] ... ExecStartPre=/bin/sleep 10这样就会延迟 10 秒执行主命令。
8. 实战案例:让 LED 开机闪烁 3 次
不只是点亮,我们来点更有意思的。
修改/usr/local/bin/gpio-init.sh:
#!/bin/bash # 导出 GPIO echo "6" > /sys/class/gpio/export sleep 0.1 echo "out" > /sys/class/gpio/gpio6/direction # 闪烁 3 次 for i in {1..3}; do echo "1" > /sys/class/gpio/gpio6/value sleep 0.3 echo "0" > /sys/class/gpio/gpio6/value sleep 0.3 done # 最后保持点亮 echo "1" > /sys/class/gpio/gpio6/value保存后,重新加载服务:
sudo systemctl daemon-reload sudo systemctl restart gpio-init.service重启设备,你会看到 LED 先闪三下,再常亮——像是在“打招呼”。
9. 总结:选择最适合你的方式
9.1 回顾两种方法
- init.d 脚本:简单直接,适合临时测试或快速上手,但功能有限。
- systemd 服务:更专业、更稳定,支持日志、依赖、重启策略,强烈推荐用于正式环境。
9.2 给初学者的建议
- 先用 init.d 写个简单脚本,验证 GPIO 是否正常工作
- 再迁移到 systemd,写成 service 文件,实现真正的自动化
- 用
systemctl status和journalctl学会排查问题
9.3 你可以举一反三的应用场景
- 自动挂载 U 盘或硬盘
- 启动 Python 监控脚本
- 设置屏幕亮度或音频输出
- 运行一个本地 Web 服务
只要能写成命令,就能让它开机自动运行。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。