시작할 때 Python 스크립트 실행


29

이 질문은 몇 번 전에 요청되었지만 기존 정보를 사용하여 작동하지 않는 것 같습니다.

내 파이는 Raspbian을 실행합니다. 영원히 반복되는 dnscheck.py라는 Python 스크립트가 있습니다.

부팅 할 때 필요합니다. 나는 다음과 같은 것을 포함하는 .sh 파일을 만들어야한다는 것을 알고있다.

sudo python dnscheck.py &

내가 모르는 것은이 파일의 위치 또는 다른 파일이 있어야하는지입니다. init.d 폴더에 대해서는 알고 있지만 골격 예제를 보면이 간단한 작업을 수행하는 더 간단한 방법이 있어야한다고 생각합니다.


정말 쉬운 방법은이 튜토리얼을 통해 단계별로 체크 아웃하는 것입니다 .-- > youtu.be/Tvnrx-2QaUU 는 필요한만큼 많은 런처를 만들고 crontab에서 모든 런처를 처리합니다.
Hossein RM

답변:


20

뼈대 스크립트를 사용하여 start, stop, restart 등과 같은 명령으로 프로세스를 제어하려면 목적에 맞게 변경하는 것이 가장 좋습니다.

프로세스를 시작하려면 명령을에 넣으십시오 /etc/rc.local. (필자는 RPi가 없지만 온라인에 'exit 0'줄이 있다는 것을 읽었습니다.이 줄 위에 명령을 넣어야합니다.)


1
효과가 있었다! 스크립트 및 rc.local에 대한 권한을 다시 755 (읽기 / 쓰기 / 실행)로 설정하는 것은 필수입니다. 둘 다이 설정이 필요한지 확실하지 않지만 저에게 효과적이었습니다. 도움을 주셔서 감사합니다!
Vlad Schnakovszki 님이

7
"당신이 당신의 질문에 그것을 썼 듯이" 확실하지 않습니다-당신 rc.local은 루트 로 실행 sudo가 필요하지 않습니다 . 분명히 스크립트의 전체 경로를 지정해야합니다. 또한& 스크립트가 분기되도록 끝에 추가해야합니다 ( 예 :) /path/to/foobar.py &.
goldilocks

1
@goldilocks 왜 추가해야하는지 설명해 주 &시겠습니까? 내가 그것을 사용하지 않고 사용할 때 모든 것이 여전히 예상대로 작동하기 때문입니다.
Huy.PhamNhu

2
@ Huy.PhamNhu 귀하의 질문에 답변 : Pi는 부팅시 그리고 다른 서비스가 시작되기 전에이 프로그램을 실행합니다. 앰퍼샌드를 포함하지 않고 프로그램이 계속 실행되면 Pi는 부팅 프로세스를 완료하지 않습니다. 앰퍼샌드는 명령이 별도의 프로세스에서 실행되고 기본 프로세스가 실행중인 상태에서 부팅을 계속할 수 있도록합니다.
아민 Harbaoui

6

스크립트가 (우리가 파일에 저장됩니다 이동 dnscheck에) /etc/init.d/, 그리고 그것을 실행할 수 있도록 권한을 설정합니다 :

chmod 755 /etc/init.d/dnscheck

스크립트 상단에 LSB init 태그 를 추가하십시오 . 스크립트에 맞게 Required-Start / Stop 및 Description 태그를 변경하려고 할 수 있습니다.

### BEGIN INIT INFO
# Provides:          dnscheck
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

그런 다음 다음을 실행하여 기호 링크를 작성하십시오.

update-rc.d /etc/init.d/dnscheck defaults

2
제발하지이 2 년 전에 알맞은 답 3, 그리고 동시에 그 것이다 여전히 작업 Raspbian의 새로운 초기화 시스템과 호환하기 때문에 LSB / 시스템 V 스타일의 스크립트, 새로운 사용자가 더 나은 대신 새로운 시스템을 사용하는 학습 떨어져 것 ( systemd )에 줄을 추가하는 것만으로 /etc/rc.local는 충분하지 않습니다.
goldilocks

3

물론이를 수행하는 방법에는 여러 가지가 있지만를 사용하는 것을 잊지 마십시오 cron. @rebootcrontab에 줄 을 넣으면 다시 시작할 때마다 해당 명령이 실행됩니다.

테스트에, 난 그냥 내 사용자의 crontab에 다음 줄을 추가 crontab -e: @reboot echo "$(date)" >> ~/boot.txt 이 방법의 보너스는 부팅 시간 이외의 다른 간격으로 필요에 따라이 작업을 호출 할 수 있습니다, 당신은 편집 init 스크립트를 필요가 없다는 것입니다.


3

rc.local 파일을 사용하면 문제 해결에 도움이 될 수 있습니다. 오류 (stderr) 및 명령 출력 (stdout)을 로그 파일에 기록하기 위해 로깅 행을 추가 할 수 있습니다. 이 예제에 따르면 파일은 /tmp/rc.local.log에 저장됩니다.

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exec 2> /tmp/rc.local.log      # send stderr from rc.local to a log file
exec 1>&2                      # send stdout to the same log file

# Your other commands...

exit 0

읽어 보기


3

djb의 daemontools 가 여기에 언급되지 않은 것에 정말 놀랐습니다 . Daemontools는 적절한 프로세스 감독을 수행하며 자동 회전 로깅과 같은 멋진 기능을 추가 할 수 있습니다. TL; DR 이것에 익숙하지 않으면 프로세스는 실패 할 때마다 다시 시작되고 Pi가 켜지면 자동으로 시작됩니다. 실패 모드가있는 나쁜 파이썬 프로그램을 작성했지만 오류가 발생하면 죽지 않으려는 경우에 좋습니다.

설치

sudo apt-get 설치 daemontools daemontools-run

그런 다음 단계를 수행하여 데몬 화 된 프로세스를 작성하십시오.

run스크립트를 /etc/service/<my_custom_service_name>다른 특권 으로 복사하는 것만큼이나 간단 합니다. 모든 사용자 또는 루트로 실행할 수 있습니다! 링크의 세부 사항.

FWIW 나는 Pi 프로젝트를 가지고 있는데 3 개의 다른 파이썬 프로세스가 있습니다 (각각 CPU 시간을 사용하여 실행 루프가 있었으므로 3 개의 프로세스를 사용하여 각 프로세스가 1 개의 CPU 코어를 활용할 수있게했습니다). Daemontools를 사용하면 Pi를 꽂은 후에 3 개가 모두 자동으로 실행되고 계속 실행되도록 할 수있었습니다.


간단하고 쉬운 솔루션, 당신은 많은 시간, 절약 감사 답변입니다 ..
ShivaGuntuku

2

내가 끊임없이 사용하는 솔루션은 다음과 같습니다.

데스크탑 파일 생성

xyz.desktop

그것에 다음을 입력

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=<Application Name Goes here>
Comment=
Exec=  python /home/pi/Desktop/execute_on_boot.py
StartupNotify=false
Terminal=true
Hidden=false

이 파일을

/home/pi/.config/autostart/

라즈베리 파이를 다시 시작하면 자동으로 새 터미널에서 프로그램을 실행해야합니다


여러 질문에 대한 답을 잘라내어 붙여 넣지 마십시오. 답변이 동일하면 최신 버전은 중복으로 표시되어야합니다.
스티브로 빌라 드

내가하지 않은 유일한 이유는이 페이지가 다른 페이지보다 조회수가 더 많기 때문입니다.
evolutionizer

@SteveRobillard 나는 또한 그렇게하는 데 필요한 담당자가 있다고 생각하지 않는다
evolutionizer

게시물을 신고하면 답글 15 개만 걸립니다. 무엇을해야할지 결정하는 것은 중재자의 역할입니다. 따라서 조회 수는 관련이 없습니다. 중복 답변은 시스템에 의해 자동으로 표시됩니다. 그것들은 시스템 게임의 한 형태입니다. 따라서 세 번째 것을 삭제했습니다.
스티브로 빌라 드

@SteveRobillard 정보를 주셔서 감사하고 내 무지를 용서하십시오. 이전 질문을 중복으로 표시했습니다.
evolutionizer

2

.py 파일을 사용하려면 파일 #!/usr/bin/python맨 앞에 줄 을 넣으십시오 . 그런 다음로 실행 파일을 만드십시오 chmod +x filename. 다음으로 줄 앞에 줄 /path/to/file.py &을 추가합니다 ( 스크립트 경로로 바 pping). 이렇게하면 부팅이 끝날 때 파이썬 스크립트가 실행됩니다./etc/rc.localexit 0/path/to/file.py


0

나를 위해 더 쉬운 방법이 있습니다. LXDE에서 자동 시작을 수정하십시오.

터미널을 열고 다음과 같이 자동 시작 파일을 편집하십시오.

sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart

하단에 다음 텍스트 줄을 추가하십시오 (example.py가있는 곳의 경로를 수정하십시오)

@/usr/bin/python /home/pi/example.py

ctr-x로 저장하십시오. 다음과 같이 파이썬 스크립트를 실행 가능하게 만들어야 할 수도 있습니다.

sudo chmod +x /home/pi/example.py

참조 LXDE에서 자동 시작과에 대한 참조 를 만드는 파이썬 실행 파일


당신이 GUI에서 시작되지 않는 경우 참고이 작동하지 않습니다 (예 : 당신의 파이 헤드리스 실행)
Havnar

0

이 솔루션은 Feh를 실행하여 파이썬 스크립트를 시작하려고 시도하는 데 효과가 없었습니다. 다음은 효과가있었습니다. 로그인 후 스크립트를 시작합니다.

터미널 세션을 열고 파일을 편집하십시오

sudo nano /etc/profile

파일 끝에 다음 줄을 추가하십시오.

/home/pi/your_script_name.sh

스크립트 이름과 경로를 시작 스크립트의 올바른 이름과 경로로 바꾸십시오. 저장하고 종료

Ctrl + X를 눌러 nano 편집기를 종료 한 다음 Y를 눌러 파일을 저장하십시오.

내 script.sh의 모습은 다음과 같습니다.

#!/bin/sh
cd /
cd home/pi/
sudo python your_python_sript.py &
exit 0
cd /

chmod를 사용하여 script.sh와 script.py를 모두 실행 가능하게 만들었다 고 생각합니다.

sudo chmod +x home/pi/your_script_name.sh
sudo chmod +x home/pi/your_python_script.py
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.