我建立了一個無線傳感器網絡,該網絡由兩個裝有傳感器的Raspberry Pi(runnnig Raspbian)和一個用於收集數據的基站Raspberry Pi組成。
每次我要運行系統時,我必須登錄每個傳感器單元並運行兩個循環的Python程序,一個用於收集傳感器數據,另一個用於傳輸到基站。
這些單元正進入無法訪問Internet的尷尬位置,因此需要一個監視器,用鍵盤和鼠標讓它們運行起來並不是一件容易的事。有什麼方法可以將它們設置為自動登錄,運行程序1,然後在啟動時自動運行程序2?
我建立了一個無線傳感器網絡,該網絡由兩個裝有傳感器的Raspberry Pi(runnnig Raspbian)和一個用於收集數據的基站Raspberry Pi組成。
每次我要運行系統時,我必須登錄每個傳感器單元並運行兩個循環的Python程序,一個用於收集傳感器數據,另一個用於傳輸到基站。
這些單元正進入無法訪問Internet的尷尬位置,因此需要一個監視器,用鍵盤和鼠標讓它們運行起來並不是一件容易的事。有什麼方法可以將它們設置為自動登錄,運行程序1,然後在啟動時自動運行程序2?
您可以將這兩個程序添加到rc.local文件中。這將在啟動時運行它們。可以在 http://www.raspberrypi.org/documentation/linux/usage/rc-local.md中找到更多信息。
Xer0FyT的答案可能是在PI上自動啟動程序的最簡單方法。但是,一旦啟動的程序由於某種原因而崩潰,因為沒有進程監視,它將不會重新啟動,就會出現問題。我個人建議使用 daemontools代替。設置非常簡單(並包含在Raspbian中)。基本上,您將創建一個服務目錄,其中包含一個啟動程序的 run
shell腳本。然後daemontools將確保您的程序由於任何原因崩潰而啟動和重新啟動。
設置daemontools非常簡單。只需
apt-get install daemontools daemontools-run
然後創建包含可執行運行腳本的服務目錄:
#創建服務目錄mkdir -p / service / my-service#創建運行腳本cat > / service / my-service / run <<EOF#!/ bin / shecho“我是由daemontools執行的示例服務” sleep 1#替換真正調用程序的那兩行是這樣的:#exec /my/program.py --argumentsEOF#使它可執行chmod 755 / service / my-service / run
查看 / service / my-service / run
並對其進行編輯,以便它啟動您自己的程序,而不是運行 echo
。完成後,將該目錄符號鏈接到 / etc / service
中,以便daemontools自動(重新)啟動該目錄:
cd / etc / serviceln -s / service / my-服務。
大約5秒鐘後,您的程序應運行。您可以使用
#停止/啟動它$ svc -d / service / my-service#啟動它$ svc -u / service / my-service
還可以登錄到(例如)syslog。因此,程序的輸出不會丟失。我在這裡寫了一篇更完整的博客文章: https://info-beamer.com/blog/running-info-beamer-in-production
關閉LXSession配置應用程序並重新啟動pi
您的Java應用程序應在重新啟動後運行
您可能已經為PI的一些內部管理任務安裝了 cron
。
在 man 5 crontab
中搜索 @reboot 代碼>。
您可能想研究 service
。您可以創建一個作為系統初始化一部分的初始化腳本,並將其放在適當的運行級別。
運行 man服務
。
創建初始化腳本的指南: http://www.novell.com/coolsolutions/feature/15380.html
只需遵循此鏈接。
假設您在桌面上有test.txt,則示例可能是:
sudo nano / etc / xdg / lxsession / LXDE-pi / autostart @ leafpad /home/pi/Desktop/test.txt
,它可以正常工作!