概述
1 程序自启动
之前在树莓派上写的程序,都是通过ssh连接后在控制台上用命令行启动的,这种方式适合测试和调试,完善好程序后,比较好的方法是把程序设置为开机自启动,这样树莓派一上电就开始运行程序。查阅网上的资料,主要有三种方法,一是在rc.local添加启动项;二是在~/.config/autostart中添加桌面启动应用;三是在/etc/init.d/中添加服务项。
2 编辑测试程序
首先编辑一个python程序用来测试,这个测试程序最好是个通过GPIO驱动LED灯闪烁的程序,通过在控制台输出信息的方法不太合适,控制台未必显示。或者参考我的测试程序,一个UDP数据发送程序,如果启动的话就不停地发送字符串,文件名为Auto_Start_Demo.py,内容如下:
#!/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
命令赋予操作权限。
相应的,在自己电脑上写个接收程序:
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文件,编辑内容如下:
[Desktop Entry]
Type="Application"
Exec="/home/pi/Auto_Start_Demo.py &"
接着重启树莓派进行测试。因为这种方法一般是用于桌面应用的自启动,我预想应该是不行的,结果还是成功了,但是也不是每次都有效。
5 通过服务脚本自启动
执行ls /etc/init.d
可以看到该目录下有很多服务程序文件,在这里添加自己的服务文件,就可以对其进行配置从而实现自启动。在该目录下新建文件Auto_Start_Test,编辑内容:
#!/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 程序自启动2 编辑测试程序3 通过rc.local自启动4 通过桌面应用自启动5 通过服务脚本自启动6 结论所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复