시작할 때 Python 스크립트 실행 할 때 필요합니다. 나는 다음과 같은

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

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

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

sudo python dnscheck.py &

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



답변

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

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


답변

스크립트가 (우리가 파일에 저장됩니다 이동 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


답변

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

테스트에, 난 그냥 내 사용자의 crontab에 다음 줄을 추가 crontab -e:

@reboot echo "$(date)" >> ~/boot.txt

이 방법의 보너스는 부팅 시간 이외의 다른 간격으로 필요에 따라이 작업을 호출 할 수 있습니다, 당신은 편집 init 스크립트를 필요가 없다는 것입니다.


답변

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

읽어 보기


답변

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 개가 모두 자동으로 실행되고 계속 실행되도록 할 수있었습니다.


답변

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

데스크탑 파일 생성

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/

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


답변

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