崩潰時自動啟動python腳本
每次它在我的樹莓派上崩潰時,我都試圖自動啟動一個 python 腳本。我堅持這裡提供的 shell 腳本解決方案:https ://raspberrypi.stackexchange.com/questions/14735/how-do-i-restart-a-python-program-on-my-pi-when-it-crashes
在根目錄中,我創建了一個帶有
sudo nano constantrun.sh
.這個 shell 腳本的內容目前是(在考慮到評論和答案中提供的更改後):
#!/bin/sh COMMAND='python home/pi/projects/mypythonscript.py' LOGFILE=restart.txt writelog() { now=`date` echo "$now $*" >> $LOGFILE } writelog "Starting" while true ; do $COMMAND writelog "Exited with status $?" writelog "Restarting" done
然後我跑去
sudo chmod +x constantrun.sh
讓它可執行。之後,我
sudo sh constantrun.sh
成功地執行了腳本。腳本現在可以初始化了。但是,由於我的 python 腳本使用 mysqlconnector 模組,我現在收到的錯誤是:
Traceback (most recent call last): File "mypythonscript.py", line 8, in <module> import mysql.connector as mariadb ImportError: No module named mysql.connector
使用文件資源管理器,似乎 mysql.connnector 安裝在
home/pi/.local/lib/python2.7/site-packages/mysql_connector-2.1.6.dist-info
如何解決此錯誤?
感謝那些對我的查詢發表評論/回答的人的輸入,現在已經解決了執行 shell 腳本的問題。其中最主要的有用建議是 Fox 建議在我的 shell 腳本命令行中使用引號,以及建議在全球範圍內重新安裝我的 python 腳本所需的模組。
總之,我的 shell 腳本內容如下:
#!/bin/sh COMMAND='python home/pi/projects/mypythonscript.py' LOGFILE=restart.txt writelog() { now=`date` echo "$now $*" >> $LOGFILE } writelog "Starting" while true ; do $COMMAND writelog "Exited with status $?" writelog "Restarting" done
然後我跑去
sudo chmod +x constantrun.sh
讓它可執行。之後,我執行了腳本sudo sh constantrun.sh
然後我遇到了 importmodule 錯誤:
ImportError: No module named mysql.connector
這已通過對 mysql.connector 進行 pip 解除安裝來解決。然後我繼續全域安裝 mysql.connector 和
sudo pip install mysql-connector-python
. 然後我的 shell 腳本可以使用sudo sh constantrun.sh
.然而,雖然它目前正在工作,但我不完全確定這種方法是否真的可以幫助從長遠來看,如果腳本崩潰,它會自動重新啟動。我將進一步監測,看看這種方法是否有效。
您沒有
x
權限(執行)您的mypythonscript.py
. 您需要為此使用chmod
:
chmod +x /home/pi/projects/mypythonscript.py
此外,您的 python 腳本可能需要一個shebang,例如:
#!/usr/bin/python3