樹莓派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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM