树莓派ZeroW开机自动运行

>> [目录] 数据远程采集 Step by Step


树莓派型号:Zero W

树莓派系统:Raspbian,2018-11-13-raspbian-stretch-lite.img

Python 2.7.3



之前调试的程序但都是手动运行的,现在要让它开机自动运行。

网上搜到了3种方法:

rc.local中添加启动代码 按N个版本的文章试了几次都没成功
作为服务启动 测试OK
通过桌面启动 raspbian-stretch-lite系统不带没有桌面


作为服务启动的意思是,开机启动一个服务,在这个服务程序中,调用python来执行程序文件,这样程序文件就可以做到开机自动运行了。

先看一下系统已有的一些服务,进入/etc/init.d目录后列出所有内容:

pi@raspberrypi:~ $ cd /etc/init.d

pi@raspberrypi:/etc/init.d $ ls

image

可以随便开几个看一下里面大概是什么东西:

pi@raspberrypi:/etc/init.d $ sudo nano ssh

pi@raspberrypi:/etc/init.d $ sudo nano ntp


准备好需要开机启动的程序 test_serial.py,文件保存在 /home/pi/test_serial.py

/etc/init.d目录下新建服务的脚本test-serial,名字最好起特别一点,防止和系统已有的冲突。

pi@raspberrypi:~ $ sudo nano /etc/init.d/test-serial

在弹出的nano编辑器中,把下面这段复制进去,保存退出:

  1 #!/bin/bash
  2 # /etc/init.d/test-serial
  3 
  4 ### BEGIN INIT INFO
  5 # Provides: xxxx_test_serial
  6 # Required-Start: $remote_fs
  7 # Required-Stop: $remote_fs
  8 # Default-Start: 2 3 4 5
  9 # Default-Stop: 0 1 6
 10 # Short-Description: test serial functions
 11 # Descrption: This service is used to start test-serial service
 12 ### END INIT INFO
 13 
 14 case "$1" in
 15     start)
 16         echo "Start"
 17         python /home/pi/test_serial.py &
 18         ;;
 19     stop)
 20         echo "Stop"
 21         killall test_serial.py
 22         exit 1
 23         ;;
 24     *)
 25         echo "Usage:service test-serial start|stop"
 26         exit 1
 27         ;;
 28 esac
 29 exit 0

image

前面的几行注释也是有用的,再写新的服务时,按实际的名字和功能填一下。

start)下面的 python /home/pi/test_serial.py & ,表示用python来运行/home/pi/test_serial.py这个文件,后面的 & 表示该程序可以在后台运行,这样不会影响其他服务的运行。


切换到/etc/init.d目录,列出该目录下所有文件

pi@raspberrypi:~ $ cd /etc/init.d

pi@raspberrypi:/etc/init.d $ ls

可以看到其他的服务文件都是绿色的,而test-serial是灰色的

image

在Linux系统中,不同的颜色代表不同的文件类型:

蓝色 目录
绿色 可执行文件
红色 压缩文件
浅蓝色 链接文件
红色闪烁 链接文件异常
黄色 设备文件
灰色 其它文件


给test-serial文件增加执行权限,这样才能被执行调用:
pi@raspberrypi:~ $ sudo chmod +x /etc/init.d/test-serial

image

接着将test-serial添加到系统的启动项中:
pi@raspberrypi:~ $ sudo update-rc.d test-serial defaults

启动test-serial
pi@raspberrypi:~ $ sudo service test-serial start

查看运行状态
pi@raspberrypi:~ $ service test-serial status

image


重启树莓派,查看服务是否自动启动

pi@raspberrypi:~ $ sudo shutdown -h now

pi@raspberrypi:~ $ service test-serial status

image


连接串口助手,波特率19200,串口助手发送test,显示正常,说明test_serial.py开机自动运行配置成功了。

image


数据远程采集项目中,用到下面两个程序,采用上述的方法,用两个服务分别开机启动运行:

xx_monitor.py 通讯、存储
xx_upload.py 上传数据文件


扩展内容

删除文件的执行权限

pi@raspberrypi:~ $ sudo chmod -x /etc/init.d/test-serial

删除系统启动项

pi@raspberrypi:~ $ sudo update-rc.d -f test-serial remove


如果修改了服务脚本,再次使用到服务中的指令时,会提示要重载,按提示输入:
pi@raspberrypi:~ $ systemctl daemon-reload

这时又提示需要root权限,但是之前还没有设置过root相关的东西。

image

设置root账户的的密码:

pi@raspberrypi:~ $ sudo passwd root

开通root账户:

pi@raspberrypi:~ $ sudo passwd --unlock root

再运行systemctl daemon-reload,提示成功

pi@raspberrypi:~ $ systemctl daemon-reload

image


猜你喜欢

转载自www.cnblogs.com/hotwater99/p/12749966.html