ここで前の投稿を参照したいと思います。Pythonスクリプトがクラッシュするたびに自動的に起動されます。raspberry pi
衝突が発生すると、鉱山(Stretch OS)は2つのPythonスクリプトを再起動します。
呼び出されるシェルスクリプトコードはconstantrun.sh
次のとおりです。
#!/bin/sh
PYTHONPATH=/home/pi/.local/lib/python2.7/site-packages
COMMAND1=python /home/pi/project/script1.py
COMMAND2=python /home/pi/project/script2.py
rm -f COMMAND1_failed; ("${COMMAND1[@]}"; touch COMMAND1_failed)&
rm -f COMMAND2_failed; ("${COMMAND2[@]}"; touch COMMAND2_failed)&
while true
do
if [ -e COMMAND1_failed ]
then
# Restart Command1
rm -f COMMAND1_failed; ("${COMMAND1[@]}"; touch COMMAND1_failed)&
fi
if [ -e COMMAND2_failed ]
then
# Restart Command2
rm -f COMMAND2_failed; ("${COMMAND2[@]}"; touch COMMAND2_failed)&
fi
sleep 60
done
端末で次のコマンドを実行しました。
sudo chmod +x constantrun.sh # to make the script executable
次に、次のようなPythonスクリプトに権限を付与します。chmod +x /home/pi/project/script1.py
次に、スクリプトを初期化するために以下を使用しました。
sudo sh constantrun.sh
ただし、次のエラー メッセージが表示されます。
/usr/bin/env: ‘python\r’: No such file or directory
/usr/bin/env: ‘python\r’: No such file or directory
constantrun.sh: 7: constantrun.sh: Bad substitution
constantrun.sh: 8: constantrun.sh: Bad substitution
これらのエラーをどのように解決できますか?
ベストアンサー1
問題は\r
通常、Windowsエディタを使用して発生します。 Pythonスクリプトを確認してください。コマンド変数の割り当てにはスペースが含まれています。配列構文を使用して参照できますが、配列として定義しないでください。便利に使用するにはエクスポートする必要がありPYTHONPATH
ます。
この問題に対するより簡単な解決策があります。
#!/bin/sh
export PYTHONPATH=/home/pi/.local/lib/python2.7/site-packages
COMMAND1="python /home/pi/project/script1.py"
COMMAND2="python /home/pi/project/script2.py"
(while true; do $COMMAND1; done &)
(while true; do $COMMAND2; done &)