Pythonスクリプトがクラッシュするたびに自動的に起動されます。

Pythonスクリプトがクラッシュするたびに自動的に起動されます。

私のラズベリーパイでクラッシュが発生するたびにPythonスクリプトを自動的に起動しようとしています。ここで提供されているシェルスクリプトソリューションに従いました。https://raspberrypi.stackexchange.com/questions/14735/how-do-i-restart-a-python-program-on-my-pi-when-it-crashes

ルートディレクトリにsudo nano constantrun.sh

現在のシェルスクリプトの内容は次のとおりです(コメントと回答で提供されている変更を考慮した後)。

#!/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.connectorがインストールされているようです。home/pi/.local/lib/python2.7/site-packages/mysql_connector-‌​‌​2.1.6.dist-info

このエラーをどのように解決できますか?

答え1

xを実行する権限がありません。以下を使用する必要がmypythonscript.pyあります。chmod

chmod +x /home/pi/projects/mypythonscript.py

またシェルボーンPythonスクリプトの場合は、次のようになります。

#!/usr/bin/python3

答え2

私のクエリにコメント/答えを与えた人のコメントのおかげで、シェルスクリプトの実行に関する問題が解決されました。有用な提案の中で最も重要なのは、私のシェルスクリプトのコマンドラインに引用符を使用するようにFoxの提案と、私のPythonスクリプトに必要なモジュールをグローバルに再インストールするという彼の提案でした。

要約すると、私のシェルスクリプトは次のようになります。

#!/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

その後、インポートモジュールエラーが発生しました。ImportError: No module named mysql.connector

pipを介してmysql.connectorを削除すると問題が解決しました。その後、mysql.connectorを使用してグローバルにインストールしましたsudo pip install mysql-connector-python。その後、.dllを使用してシェルスクリプトを正常に起動できますsudo sh constantrun.sh

しかし、現在動作していますが、このアプローチは、長期的にスクリプトがクラッシュした場合に自動的に再起動するのに実際に役立つかどうかはわかりません。これがうまくいくかどうかをさらに監視します。

関連情報