【樹莓派】在樹莓派上制作開機自啟動程序及服務


希望將自己的application在樹莓派(Raspberry Pi ),做成開機自動運行,進行了一些實踐,如下:

 

測試環境:樹莓派,管理員:root,普通用戶:haochuang

實現目標:在Linux啟動時,自動運行位於普通用戶haochuang根目錄下的腳本程序osprey,該程序會在每次執行時自動向本地日志文件追加一條記錄,源碼如下:

 

1. 准備好相應的 application

#!/bin/sh
### BEGIN INIT INFO
# Provides:          osprey
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Required-Start: $local_fs
# Required-Stop:
# chkconfig: 12345 99 05
# Short-Description: Start or stop the Osprey App.
### END INIT INFO

start(){
    echo -n "start osprey"
    cd /home/lifeccp/webapp/osprey
    su haochuang -c "java -jar osprey-*.jar --spring.profiles.active=test &"
}

stop(){
    echo -n "stop osprey"
}

case $1 in
start)
    start
    ;;
stop)
    stop
    ;;
*)
    echo "Usage: $0 (start|stop)"
    ;;
esac

 

2.為程序增加可執行權限,並將程序放到 /etc/init.d/

 mv osprey /etc/init.d/
 chmod +r /etc/init.d/osprey

 3.安裝chkconfig

sudo apt-get install chkconfig

如果安裝失敗,則使用下面命令再次嘗試:

sudo apt-get install chkconfig --fix-missing

 

4.運行chkconfig --add osprey, 把該服務添加到配置當中

 

5.運行chkconfig --list osprey,可以查看該服務進程的狀態 

 

6.完了之后,reboot一下,並查看進程,進行驗證;

 

 由於我增加了兩個服務,結果截圖如下:

 

補充1,方案的解釋:

切換用戶到haochuang,然后執行命令啟動應用程序;

su haochuang                    --切換到相應用戶
cd /home/haochuang                 --切換到根目錄
java -jar osprey-1.0.4.jar --spring.profiles.active=test &  --執行應用程序
exit                         --退出帳號

 

做成服務的好處是可以定義多個交互命令,比如:start,stop,restart,reset...,在服務運行的過程中還可以做相應操作。

看起來好象一切都沒錯,但是發現只運行了第一行的命令,后面的都沒有運行,直到退出lifeccp用戶后才發現好象執行完畢。

分析原因,是因為Linux啟動的時候是在root帳號下,執行su lifeccp等於打開了一個新的shell腳本,因此下面的代碼都在等着新的Shell腳本結束才能運行,就象在主程序里調用了一個子程序,而子程序是個死循環,一下出來來結果下面的要等死了。

在執行上述腳本程序時,不要離開本身的Shell。我們可以把執行命令做為su的一個參數傳遞進去,因為沒有涉及到打開新的Shell,因此可以正常執行你期望的腳本程序,順利實現開機自動啟動指定的腳本程序。

 

補充2,如果執行 sudo apt-get install chkconfig 一直報錯,安裝不成功,那么需要檢查如下幾點:

  • 檢查設備網絡情況是否正常,確保設備網絡本身可通達內外網;
  • 更新一下系統配置:sudo apt-get update

然后再次重試。

 

 

如果有問題,請參考另一篇新的:【樹莓派】在樹莓派上制作開機自啟動程序及服務2

 


免責聲明!

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



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