RK3568编写自启动脚本
文章目录
- Linux 嵌入式系统自启动脚本讲解
- 1. 自启动脚本的位置与命名
- 2. 脚本结构
- 3. 编写示例脚本
- 说明
- 4. 注册脚本为开机自启
- 5. 总结
Linux 嵌入式系统自启动脚本讲解
在嵌入式 Linux 系统中,经常需要让某些程序在系统启动时自动运行,例如守护进程、日志程序或自定义应用。自启动脚本是一种经典、可靠的方式,适用于 SysV init 系统或者兼容 SysV 的启动管理方式。
本文将讲解如何编写自启动脚本,并提供一个通用示例。
1. 自启动脚本的位置与命名
自启动脚本通常放在 /etc/init.d/
目录下,命名规则如下:
- S开头(Start):开机启动脚本,数字表示启动顺序,数字越小越早执行。
- K开头(Kill):关机或停止脚本,顺序与 S 脚本相同。
- name:描述脚本功能。
示例:
S01syslogd # 系统日志服务
S50network # 网络服务
S99myprogram # 用户自定义程序
启动顺序是按照数字从小到大执行 S 脚本,关机时执行 K 脚本。
2. 脚本结构
标准自启动脚本一般包括以下部分:
- Shebang
#!/bin/sh
- Init 信息(可选,但便于管理)
### BEGIN INIT INFO
# Provides: myprogram
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start myprogram at boot
### END INIT INFO
- case 语句:处理
start
、stop
、restart
等命令
case "$1" instart)echo "Starting myprogram..."/mnt/myprogram & # 后台启动程序;;stop)echo "Stopping myprogram..."pkill -f myprogram # 根据程序名停止;;restart)$0 stop$0 start;;*)echo "Usage: $0 {start|stop|restart}"exit 1;;
esacexit 0
3. 编写示例脚本
假设你的程序路径是 /mnt/EasyLoggerLinuxDemo
,我们可以编写一个自启动脚本 S50EasyLogger
:
#!/bin/sh
### BEGIN INIT INFO
# Provides: EasyLogger
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start EasyLogger at boot
### END INIT INFOcase "$1" instart)echo "Starting EasyLogger..."/mnt/EasyLoggerLinuxDemo &;;stop)echo "Stopping EasyLogger..."pkill -f EasyLoggerLinuxDemo;;restart)$0 stop$0 start;;*)echo "Usage: $0 {start|stop|restart}"exit 1;;
esacexit 0
说明
- 后台运行:程序末尾加
&
,防止阻塞启动流程。 - 停止程序:使用
pkill -f
通过程序名停止。 - 权限:脚本必须可执行:
chmod +x /etc/init.d/S50EasyLogger
- 启动顺序:S50 表示在顺序 50 时启动,数字越小越早。
4. 注册脚本为开机自启
在 SysV init 系统中,可以使用 update-rc.d
注册脚本:
update-rc.d S50EasyLogger defaults
- 会自动在
/etc/rc*.d/
下生成 S50 和 K50 的符号链接。 - 系统开机时执行 S50EasyLogger start,关机或运行级别切换时执行 K50EasyLogger stop。
5. 总结
自启动脚本可以实现:
- 开机自动启动程序。
- 后台运行,避免阻塞系统启动。
- 统一管理 start/stop/restart。
- 控制启动顺序,通过文件名数字实现。
通过以上方式,任何程序都可以在嵌入式 Linux 系统中实现开机自启动。
成功运行: