樹莓派型號: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
可以隨便開幾個看一下里面大概是什么東西:
pi@raspberrypi:/etc/init.d $ sudo nano ssh
pi@raspberrypi:/etc/init.d $ sudo nano ntp
/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
前面的幾行注釋也是有用的,再寫新的服務時,按實際的名字和功能填一下。
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是灰色的
在Linux系統中,不同的顏色代表不同的文件類型:
藍色 | 目錄 |
綠色 | 可執行文件 |
紅色 | 壓縮文件 |
淺藍色 | 鏈接文件 |
紅色閃爍 | 鏈接文件異常 |
黃色 | 設備文件 |
灰色 | 其它文件 |
給test-serial文件增加執行權限,這樣才能被執行調用:
pi@raspberrypi:~ $ sudo chmod +x /etc/init.d/test-serial
接着將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
重啟樹莓派,查看服務是否自動啟動
pi@raspberrypi:~ $ sudo shutdown -h now
pi@raspberrypi:~ $ service test-serial status
數據遠程采集項目中,用到下面兩個程序,采用上述的方法,用兩個服務分別開機啟動運行:
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相關的東西。
設置root賬戶的的密碼:
pi@raspberrypi:~ $ sudo passwd root
開通root賬戶:
pi@raspberrypi:~ $ sudo passwd --unlock root
再運行systemctl daemon-reload,提示成功
pi@raspberrypi:~ $ systemctl daemon-reload