私のラズベリーパイでクラッシュが発生するたびに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
。
しかし、現在動作していますが、このアプローチは、長期的にスクリプトがクラッシュした場合に自動的に再起動するのに実際に役立つかどうかはわかりません。これがうまくいくかどうかをさらに監視します。