🌟 什么是 systemd 和 init.d?
init.d (SysV init)
💡 这是传统 Linux 启动方式:
- 启动时按顺序执行 /etc/init.d/下的脚本(按S01xxx,S02xxx排序)
- 每个脚本自己决定做什么(启动、停止、重启)
- 简单,但功能弱,不支持并行、依赖、日志等高级功能
systemd
💡 现代 Linux 启动管理器:
- 用 unit 文件 描述服务(文件路径如 /etc/systemd/system/*.service)
- 支持启动依赖(After=、Requires=)
- 支持并行启动,大幅加快启动速度
- 自带日志管理(journalctl)
- 可以控制服务状态(restart、watchdog、自动重启等)
🌟 Armbian 的启动体系
✅ Armbian 基于 Debian / Ubuntu,默认就是用 systemd 作为启动管理器。
✅ 但为了兼容老的软件和用户习惯,保留了对 init.d 脚本 的支持。
🌟 什么叫 "底层是 systemd,兼容 init.d"?
👉 系统实际的 PID 1 进程是 systemd
也就是内核启动后第一个进程是:
            
            
              bash
              
              
            
          
          /bin/systemd👉 你的 rc.local、/etc/init.d/ 脚本,其实是 systemd 兼容层 去调用的
例如,当你开机有 /etc/init.d/gpio-init.sh:
- systemd 会生成一个临时的 unit 文件来执行它
- 实际执行和管理还是 systemd 在控制
🌟 你怎么验证?
运行:
            
            
              bash
              
              
            
          
          ps -p 1 -o comm=你会看到:
systemd这说明 PID 1 是 systemd。
或者看某个 init.d 脚本运行状态:
            
            
              bash
              
              
            
          
          systemctl status gpio-init.sh你会发现 systemd 接管了它。
🌟 为什么理解这个重要?
✅ 当你写启动脚本时,如果用 init.d,其实还是跑在 systemd 的框架下
✅ 直接用 systemd unit,可以:
- 控制更精细(依赖、顺序、重启策略)
- 启动速度更快
- 日志更好看(journalctl)
🌟 小结
👉 Armbian 的启动流程 = systemd 是主角,init.d 脚本是临时嘉宾,由 systemd 调度执行。
👉 写新服务建议用 systemd unit 文件,这样更高效、可控、易维护。
很好,你想在 Armbian (基于 Debian/Ubuntu) 上查看 当前的开机启动项,包括 init 脚本、systemd 服务等。以下是详细方法:
🌟 查看开机启动项 (systemd 管理)
Armbian 默认是用 systemd 管理启动:
            
            
              bash
              
              
            
          
          systemctl list-unit-files --type=service --state=enabled这个命令会列出当前开机会自动启动的服务,例如:
ssh.service                  enabled
networking.service           enabled
gpio-init.service            enabled
cron.service                 enabled
...其中 enabled 表示开机会启动。
👉 查看哪些服务现在正在运行:
            
            
              bash
              
              
            
          
          systemctl --type=service --state=running🌟 查看 init.d 脚本启动项 (如果你用过 update-rc.d 的话)
列出所有注册的 SysV 脚本:
            
            
              bash
              
              
            
          
          ls /etc/rc*.d/你会看到类似:
/etc/rc2.d/S01gpio-init.sh
/etc/rc2.d/S02cron
...Sxx 表示启动顺序。
🌟 综合查看全部开机项
你也可以用:
            
            
              bash
              
              
            
          
          systemctl list-dependencies multi-user.target这个命令能看出多用户模式下启动的所有服务和目标。
🌟 检查特定服务状态
例如检查你之前设置的脚本:
            
            
              bash
              
              
            
          
          systemctl status gpio-init.service或
            
            
              bash
              
              
            
          
          /etc/init.d/gpio-init.sh status(如果你用的是 init.d 脚本)
🌟 图形化工具(可选)
Armbian 可以装 htop,在里面按 F5 可以看到树状启动项:
            
            
              bash
              
              
            
          
          sudo apt install htop
htop✅ 总结推荐命令
            
            
              bash
              
              
            
          
          # 列出所有启用的 systemd 启动服务
systemctl list-unit-files --type=service --state=enabled
# 列出启动依赖
systemctl list-dependencies multi-user.target
# 列出 init.d 启动项
ls /etc/rc*.d/🚀 使用 systemd service
创建文件:
            
            
              bash
              
              
            
          
          sudo nano /etc/systemd/system/gpio-init.service内容:
            
            
              ini
              
              
            
          
          [Unit]
Description=GPIO init
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/gpio-init.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target然后把脚本移动到 /usr/local/bin/gpio-init.sh,并加权限:
            
            
              bash
              
              
            
          
          sudo chmod +x /usr/local/bin/gpio-init.sh启用:
            
            
              bash
              
              
            
          
          sudo systemctl daemon-reexec
sudo systemctl enable gpio-init.service编写启动脚本
创建文件,例如:
            
            
              bash
              
              
            
          
          sudo nano /etc/init.d/gpio-init.sh内容:
            
            
              bash
              
              
            
          
          #!/bin/bash
# 配置引脚
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
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
# 设置初始状态
echo "1" > /sys/class/gpio/gpio8/value
echo "1" > /sys/class/gpio/gpio9/value
echo "1" > /sys/class/gpio/gpio10/value
# 系统运行LED 可选择默认熄灭或点亮
echo "1" > /sys/class/gpio/gpio6/value  # 点亮 LED设置脚本执行权限
            
            
              bash
              
              
            
          
          sudo chmod +x /etc/init.d/gpio-init.sh🌱 示例测试
手动测试 GPIO:
            
            
              bash
              
              
            
          
          # 导出 GPIO
echo 6 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio6/direction
echo 1 > /sys/class/gpio/gpio6/value你会看到 LED 点亮。