Shell-Script

崩潰時自動啟動python腳本

  • December 26, 2017

每次它在我的樹莓派上崩潰時,我都試圖自動啟動一個 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

引用自:https://unix.stackexchange.com/questions/412871