Raspberry Pi의 cron에서 sudo(또는 시작) Python 스크립트를 실행하시겠습니까?

Raspberry Pi의 cron에서 sudo(또는 시작) Python 스크립트를 실행하시겠습니까?

나는 미술 프로젝트를 돕고 있어요(http://stargateeggbeater.com/관심 있는 분들을 위해) Raspberry Pi를 기반으로 구축되었습니다. RPi는 spidev다음 장치를 사용하여 GPIO를 통해 주소 지정 가능한 LED 스트립을 제어합니다.지시하다. 디스플레이를 시작하려면 다음을 실행합니다.

sudo python lightpaint-FF.py

우리는 이 프로젝트를 파티와 축제에 선보일 계획이므로 출시 시 자동으로 실행되는 것이 이상적입니다. (저희 RPi에는 모니터가 연결되어 있지 않으므로 이제 SSH를 사용하여 다른 노트북으로 로그인하고 코드를 실행 nohup한 다음 다시 로그아웃해야 합니다.)

이 문제를 해결하기 위한 첫 번째 시도는 간단한 bash 스크립트를 작성하는 것이었습니다.

#!/bin/bash

if [ ! "$(pidof python)" ] 
 then
   sudo python /home/pi/lightpaint-FF.py
fi

/etc/crontab포함하도록 수정되었습니다.

* * * * * root /home/pi/EggbeaterCronJob

원하는 동작은 매분마다 실행 중인 Python 인스턴스가 있는지 확인하고, 그렇지 않은 경우 Python 스크립트를 시작하는 것입니다. 터미널에서 호출하면 스크립트가 제대로 작동하는지 확인했습니다.

pidof python # returns nothing
sudo /home/pi/EggbeaterCronJob
pidof python # returns new process ID

그러나 내 업데이트 후에는 crontabPython 프로세스 ID가 자체적으로 나타나지 않습니다. 확실히 하기 위해 구성 crontab에서 어리석은 실수를 저지르지 않았는지 확인했습니다.

* * * * * root touch test-freaking-cron

이를 통해 cron실제로 내 편집 내용에 응답하고 있음이 확인되었습니다.

답변1

루트로 실행되므로 필요하지 않은 것을 제거 sudo하고 sudo는 기본적으로 tty 없이는 실행되지 않습니다.

visudorequiretty를 실행하고 주석 처리하여 sudo가 tty 없이 실행되도록 지시할 수 있습니다.

#Default requiretty

여기에는 보안 결함이 있습니다.여기

답변2

부팅 시 시작할 프로그램이 필요한 경우 대부분의 설정에서 가장 쉬운 방법은 명령을 에 추가하는 것입니다 /etc/rc.local. 파일이 있으면 다음 줄을 추가합니다.

python /path/to/lightpaint-FF.py &

파일이 존재하지 않는 경우 해당 내용으로 생성해 보십시오.

#!/bin/sh
python /path/to/lightpaint-FF.py &
exit 0

일부 내장 배포판은 이를 지원하지 않습니다 /etc/rc.local. 사용 중인 배포판을 사용할 수 없는 경우 해당 배포판이 무엇인지 알려주십시오.


프로그램을 모니터링하고 프로그램이 종료되면 다시 시작해야 하는 경우 init이를 수행하는 방법은 배포판에서 사용하는 init에 따라 다릅니다.

  • 전통적인 초기화의 경우 한 줄을 추가하세요/etc/inittab. BusyBox는 inittab을 지원할 수 있지만 이는 선택적 기능이므로 컴파일 타임에 선택해야 합니다.

    lp:2345:respawn:/usr/in/python /path/to/lightpaint-FF.py
    
  • 누보 부자를 위해서는 누보 부자 직업을 써주세요 ](http://upstart.ubuntu.com/getting-started.html).

관련 정보