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.

그러나 현재 작동 중이지만 이 접근 방식이 장기적으로 스크립트가 충돌할 경우 자동으로 다시 시작하는 데 실제로 도움이 될지는 확실하지 않습니다. 이것이 효과가 있는지 추가로 모니터링하겠습니다.

관련 정보