自動起動スクリプト用のシェルスクリプト

自動起動スクリプト用のシェルスクリプト

ここで前の投稿を参照したいと思います。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 &)

おすすめ記事