나는 미술 프로젝트를 돕고 있어요(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
그러나 내 업데이트 후에는 crontab
Python 프로세스 ID가 자체적으로 나타나지 않습니다. 확실히 하기 위해 구성 crontab
에서 어리석은 실수를 저지르지 않았는지 확인했습니다.
* * * * * root touch test-freaking-cron
이를 통해 cron
실제로 내 편집 내용에 응답하고 있음이 확인되었습니다.
답변1
루트로 실행되므로 필요하지 않은 것을 제거 sudo
하고 sudo는 기본적으로 tty 없이는 실행되지 않습니다.
visudo
requiretty를 실행하고 주석 처리하여 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).