我是靠谱客的博主 虚拟萝莉,这篇文章主要介绍树莓派笔记10:测试几种开机自启动的方法1 程序自启动2 编辑测试程序3 通过rc.local自启动4 通过桌面应用自启动5 通过服务脚本自启动6 结论,现在分享给大家,希望可以做个参考。

1 程序自启动

之前在树莓派上写的程序,都是通过ssh连接后在控制台上用命令行启动的,这种方式适合测试和调试,完善好程序后,比较好的方法是把程序设置为开机自启动,这样树莓派一上电就开始运行程序。查阅网上的资料,主要有三种方法,一是在rc.local添加启动项;二是在~/.config/autostart中添加桌面启动应用;三是在/etc/init.d/中添加服务项。

2 编辑测试程序

首先编辑一个python程序用来测试,这个测试程序最好是个通过GPIO驱动LED灯闪烁的程序,通过在控制台输出信息的方法不太合适,控制台未必显示。或者参考我的测试程序,一个UDP数据发送程序,如果启动的话就不停地发送字符串,文件名为Auto_Start_Demo.py,内容如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/python import socket import time HOST='192.168.191.1' PORT=9999 server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) server.connect((HOST,PORT)) data='123' try: while True: server.sendall(data.encode(encoding='utf-8')) time.sleep(1) except: server.close()

然后执行suo chmod 755 Auto_Start_Demo.py 命令赋予操作权限。
相应的,在自己电脑上写个接收程序:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import socket HOST='192.168.191.1' PORT=9999 bufsize=1024 server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) server.bind((HOST,PORT)) while True: data,addr=server.recvfrom(bufsize) if len(data)==1 and data[0]==1: #windows上可能没法用ctrl+c强制跳出程序,这里指定收到0x01时结束程序 server.close() exit() data=data.decode(encoding='utf-8') print(data)

调试一下,因为是用UDP,随便先启动哪个程序:
这里写图片描述

3 通过rc.local自启动

执行sudo vim /etc/rc.local 命令编辑rc.local文件,在exit 0 上面一行添加语句/home/pi/Auto_Start_Demo.py & ,表示运行Auto_Start_Demo.py文件(在文件代码中已经指定了用python运行),而& 符号可以简单理解为让程序运行在后台。
然后执行sudo reboot 重启树莓派,记得把自己电脑上的接收程序提前打开,看看能不能接收到数据。
尝试了多次,发现该方法并不能保证成功,用reboot 重启的话成功率还高点,断点重启的话基本都不行。此外,成功的时候如果输入ps -ef | grep Auto_Start 来查看进程情况,发现竟然有两个一样的进程。
这里写图片描述

4 通过桌面应用自启动

进入用户目录下的.config目录(为隐藏目录),里面如果没有autostart目录的话就新建一个,然后在autostart目录下新建Auto_Start_Test.desktop文件,编辑内容如下:

复制代码
1
2
3
[Desktop Entry] Type="Application" Exec="/home/pi/Auto_Start_Demo.py &"

接着重启树莓派进行测试。因为这种方法一般是用于桌面应用的自启动,我预想应该是不行的,结果还是成功了,但是也不是每次都有效。

5 通过服务脚本自启动

执行ls /etc/init.d 可以看到该目录下有很多服务程序文件,在这里添加自己的服务文件,就可以对其进行配置从而实现自启动。在该目录下新建文件Auto_Start_Test,编辑内容:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash ### BEGIN INIT INFO # Provides: Auto_Start_Test # Required-Start: $remote_fs # Required-Stop: $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Auto Start Test # Descrption: This service is used to test auto start service ### END INIT INFO case "$1" in start) echo "Stat" /home/pi/Auto_Start_Demo.py& ;; stop) echo "Stop" killall Auto_Start_Demo.py exit 1 ;; *) echo "Usage:service Auto_Start_Test start|stop" exit 1 ;; esac exit 0

这是一个bash脚本,指定了用start和stop命令进行服务的启动和停止,“BEGIN INIT INFO”那段注释是LSB标准说明,写不写都行,不写的话后面会有个警告。保存文件,执行sudo chmod 777 Auto_Start_Test 开放权限。
接着执行sudo update-rc.d Auto_Start_Test defaults 将该服务添加到自启动项,这样应该就可以奏效了。可以先手动启动服务来测试,执行sudo service Auto_Start_Test start 启动服务,执行sudo service Auto_Start_Test stop 停止服务。
重启树莓派查看效果,可以看到效果良好,无论是reboot重启还是断电重启,都能实现程序的自启动,下图是线程信息。
这里写图片描述

6 结论

用rc.local或桌面应用的方法操作比较简单,但是效果并不好,而通过服务配置的方式,效果良好。

最后

以上就是虚拟萝莉最近收集整理的关于树莓派笔记10:测试几种开机自启动的方法1 程序自启动2 编辑测试程序3 通过rc.local自启动4 通过桌面应用自启动5 通过服务脚本自启动6 结论的全部内容,更多相关树莓派笔记10:测试几种开机自启动的方法1内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部