単一のシェルスクリプトを使用して複数のPythonスクリプトがクラッシュするのを防ぎますか?

単一のシェルスクリプトを使用して複数のPythonスクリプトがクラッシュするのを防ぎますか?

Raspberry PiでPythonスクリプトがクラッシュするのを防ぐためにシェルスクリプトを作成したいと思います。この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

このシェルスクリプトを使用して、2つの別々のスクリプトがクラッシュするのを防ぐために2つのコマンドラインを作成できるかどうかを尋ねたいと思います。それとも、2番目のPythonスクリプト用の新しいシェルスクリプトファイルを作成する必要がありますか?

次のように修正しようとしています。

#!/bin/sh

COMMAND1='python home/pi/projects/mypythonscript1.py'
COMMAND2='python home/pi/projects/mypythonscript2.py'
LOGFILE=restart.txt

writelog() {
  now=`date`
  echo "$now $*" >> $LOGFILE
}

writelog "Starting"
while true ; do
  $COMMAND1
  $COMMAND2
  writelog "Exited with status $?"
  writelog "Restarting"
  done

この修正は効果がありますか?私はLinux(debian)プラットフォームに初めて接する人なので、アドバイスをいただきありがとうございます。

ベストアンサー1

systemdを使用している場合は、各コマンドのサービスを作成し、システムがクラッシュしたときにそれを再起動させることができます。

それは次のとおりです。

[Unit]
Description='description of script'

[Service]
ExecStart=/path/too/script
Restart=always

[Install]
WantedBy=multi-user.target

その後、それを挿入して/etc/systemd/system実行してsystemctl daemon-reloadサービスを開始できます。再起動後も起動します。

おすすめ記事