树莓派设置开机启动脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树莓派设置开机启动脚本相关的知识,希望对你有一定的参考价值。

参考技术A 由于北邮校内网需要Drcom拨号,每次用curl命令很麻烦,所以开始了这次写开机启动脚本的过程。

init 进程读取 /etc/inittab文件中的信息,并进入预设的运行级别。

Debian中的运行级别

查看系统当前运行级别使用 runlevel 命令,通常情况下 /etc/rcS.d/目录下的启动脚本首先被执行,然后是/etc/rcN.d/目录,N为 /etc/inittab 中的initdefault。
/etc/rc2.d 中的部分文件如下:

有K开头的文件,有S开头的文件,K的意思是Kill,S为Start。K和S后面紧跟着的数字就是关闭和启动的顺序,数字越大关闭或启动顺序越靠后。
将自定义脚本放在 /etc/init.d 目录下面,就可以使用 service yourshellname start|stop 当然需要脚本中写好start,stop功能。但是不能开机自启动。

使用update-rc.d函数将脚本设置为开机自启动。
1)设置脚本启动和关闭依赖$remote_fs,$syslog,并且启动运行级别为2-5,关闭运行级别为0,1,6。
update-rc.d foobar defaults
上面一条命令就会在/etc/rc2.d rc3.d rc4.d rc5.d中创建软链接 S03drcom -> ../init.d/drcom ,在rc0.d rc1.d rc6.d中创建软链接 K01drcom -> ../init.d/drcom 。
2)设置脚本启动关闭都为顺序20,并且启动运行级别为2-5,关闭运行级别为0,1,6。
update-rc.d foobar start 20 2 3 4 5 . stop 20 0 1 6 .
同理。

3)移除连接。
update-rc.d yourshellname remove

参考文献:
[1] 开机自动执行脚本 与 update-rc.d
[2] 树莓派开机自启动脚本制作
[3] Debian init 开机启动管理
[4] 树莓派开机启动程序及启动脚本的制作

关于树莓派自启动脚本的编写

1 自启动的原理是将想要重启时运行的文件放置在主目录下,在程序开机时就开始运行程序。(python /home/pi/ <文件> )

1.1 开机自启需要一个开机自启配置文件:
示例:

#!/bin/bash
# /etc/init.d/<service name>

### BEGIN INIT INFO
# Provides: servoblaster
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: <Short Discription>
# Description: <Discription>
### END INIT INFO

case "$1" in
start)
echo "Starting <service name>"
<command to run> &
;;
stop)
echo "Stopping <service name>"
sudo kill $(ps aux | grep -m 1 <command name> | awk { print $2 })
sudo kill $(ps aux | grep -m 1 <command name> | awk { print $2 })
;;
*)
echo "Usage: sudo service <service name> start|stop|restart"
exit 1
;;
esac
exit 0

 

1.2 完整实例

#!/bin/bash
# /etc/init.d/<pismartcar_demo>

### BEGIN INIT INFO
# Provides:          servoblaster
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: <Short Discription>
# Description:       <Discription>
### END INIT INFO

case "$1" in
    start)
        echo "Starting <pismartcar_demo>"
        <command to run>python /home/pi/voicecontrol/voicecontrol.py &
        ;;
    stop)
        echo "Stopping <pismartcar_demo>"
        sudo kill $(ps aux | grep -m 1 <command name> | awk { print $2 })
        sudo kill $(ps aux | grep -m 1 <command name> | awk { print $2 })
        ;;
    *)
        echo "Usage: sudo service <pismartcar_demo> start|stop|restart"
        exit 1
        ;;
esac
exit 0

 

2,格式非常重要。Linux和Windows的空格符有很大的不同。在Linux下运行应当是unix格式的,在sublime下编写代码时需要将格式调整到unix 

3,

第二行 <service name> 填写自启服务的名称.
填写 <Short Discription>和<Discription>
在start里面 填写后台程序运行命令, 末尾要加‘ &‘ 保证在后台运行. 这里运行的路径需要使用绝对路径.
stop里面把<command name> 喜欢丞后台运行程序的名称. 建议在手动运行start里的命令后, 再使用`ps aux`来查看运行的名称. 保证stop的时候能够正确关闭服务, 也不会关错其他服务.

注意, 服务配置运行后无法查看返回信息, 建议先手动运行:

sudo service <service name> start

查看能否正常运行,并使用:

sudo service <service name> stop
查看程序能否正常关闭

3.1. 文件命名:
文件命名与<service name>相同.不需要后缀

3. 配置:
添加可执行权限:

sudo chmod +x <service name>

拷贝到`/etc/init.d/`

sudo cp <service name> /etc/init.d/<service name>

开机自启:

sudo update-rc.d <service name> defaults

状态查询:

systemctl status pismartcar_demo.service

 

以上是关于树莓派设置开机启动脚本的主要内容,如果未能解决你的问题,请参考以下文章

树莓派开机启动运行脚本

树莓派怎么开机就执行一条命令

树莓派怎么开机就执行一条命令啊?

树莓派开机自启动opencv程序脚本及报错分析

树莓派设置frpc开机启动

树莓派:最好的安排