시작시 스크립트 실행


189

Raspberry Pi가 부팅 될 때 스크립트를 실행하려고합니다. 웹 브라우저를 자동으로 열고 싶습니다.

간단한 해결책을 찾으려고했는데 (예를 들어 "시작"디렉토리 나 비슷한 곳에 스크립트를 놓는 것과 같은) 그와 같은 것은 보이지 않습니다.

Upstart 살펴 보았지만 작동 방식을 파악하기 위해 고심하고 있습니다. 내가 시도한 스크립트는 테스트 할 때 작동하지 않았습니다.


4
어떤 운영 체제를 실행하고 있습니까? Pi에서 사용중인 FreeBSD에서는 /usr/local/etc/rc.d/에 시작 스크립트를 추가하거나 /etc/rc.local에 항목을 추가 할 수 있습니다. Linux 배포판마다 권장 방법이 다릅니다. X를 실행하고 있다면 파일 .xinitrc이나 .xsession파일에 항목을 추가해야 합니다.
ghoti

X 시작 프로세스에 대한 자세한 내용은 여기를 참조하십시오 .
ghoti

6
유의하시기 바랍니다 여기 허용 대답은 기술적으로 몇 가지주의를 가지고 하지 않는 특정 조건을 제외하고 부팅시 아무것도를 시작합니다. 주의 깊게 읽으십시오.
goldilocks

pi가 부팅되거나 시작될 때가 아니라 로그인 할 때 실행되는 스크립트를 요구합니다. 두 가지 매우 다른 점이 있으며 제목은 Google 검색 결과를 왜곡합니다.
IAmNaN

답변:


197

시작시 Midori를 실행하려면 이 학습서를보십시오 . DIY 솔루션에 대해서는 계속 읽으십시오.


당신은 하단에 스크립트 실행 명령을 추가 할 수있는 .bashrc것이다 스크립트 때마다 터미널을 열고 (또는 새로운 인스턴스를 실행할 실행 bash) .

  1. pi폴더 에 있는지 확인하십시오 .

    $ cd ~
    
  2. 파일을 작성하고 파일에서 실행할 스크립트를 작성하십시오.

    $ sudo nano superscript
    
  3. 저장하고 종료 : Ctrl+ X, Y,Enter

  4. .bashrc구성 을 위해 엽니 다 .

.bashrc스크립트를 실행하기위한 것이 아닙니다 .

비 로그인 대화식 쉘이 시작될 때마다 실행되며 쉘을 구성하는 데 사용됩니다.
~/.bashrc: executed by bash(1) for non-login shells.

   $ sudo nano .bashrc
  1. 아래로 스크롤하여 행을 추가하십시오. ./superscript

  2. 저장하고 종료 : Ctrl+ X, Y,Enter


콘솔로 부팅 할 때 작동 하는 솔루션을 찾고 있다면 이 링크를 살펴보십시오 . 기본 요약 :

  1. 시작 스크립트 용 파일을 작성하고 파일에 스크립트를 작성하십시오.

    $ sudo nano /etc/init.d/superscript
    
  2. 저장하고 종료 : Ctrl+ X, Y,Enter

  3. 스크립트를 실행 가능하게 만드십시오.

    $ sudo chmod 755 /etc/init.d/superscript
    
  4. 시작할 때 실행할 스크립트를 등록하십시오.

    $ sudo update-rc.d superscript defaults
    

LXDE 환경으로 부팅 할 때 스크립트를 실행하려면 이 Raspberry Pi 포럼 게시물을 살펴보십시오 .

  1. 로 이동 ~/.config/lxsession/LXDE-pi

  2. autostart해당 폴더 에서 파일을여십시오.

    $ sudo nano autostart
    
  3. @midori새 줄에 추가하십시오 . 파이썬 스크립트와 같은 것을 실행하려면 @python mypython.py새 줄에 같은 것을 넣으십시오 . 스크립트 파일을 실행하면 될 것이다 @./superscript, 그러나 어떤 이유로 스크립트가 무한 루프 (아마도에서 실행 이 중지됩니다).

  4. 저장하고 종료 : Ctrl+ X, Y,Enter

  5. Raspberry Pi를 LXDE 환경으로 다시 시작하십시오.


시작할 때 Midori를 설정하는 방법은 내가 찾던 것입니다. 왜 그렇게 간단한 일을 할 수있는 방법이 그렇게 많은지 잘 모르겠지만 지금이 작업이 진행되어 기쁘다.
Tyler Murry

1
@ syb0rg sde를 통해 로그인하면 로그인시 실행 부분이 참 (+1)처럼 작동하지만 lxde 데스크톱 세션이 시작될 때는 작동하지 않습니다. 그 방법이 있습니까?
George Profenza

언제 @GeorgeProfenza 당신은 $ sudo startx?
syb0rg

2
pyhton 스크립트가 실행된다는 점을 지적하고 싶었지만 오류가있는 경우 / etc / xdg / lxsession / LXDE / autostart 메소드를 사용하여 백그라운드에있을 수 있습니다. .barshrc를 사용하는 것이 아니라 오류를 확인하지만 스크립트가 처음에 꽉 확인하기 위해 매우 중요합니다 (하드 방법 : 그것을 발견)
조지 Profenza

7
.bashrc시스템을 부팅 할 때 또는 사용자가 로그인 할 때 새 터미널을 열 때만 읽지 않습니다 (그리고 사용자가 새 터미널을 열 때마다 읽습니다). 나는이 대답은 너무 많은 upvotes을 가지고 있음을 당황 해요 : 첫 번째 부분은 명백히 잘못이다 . 세 번째 부분은 GUI 프로그램을 실행하는 것이 맞습니다.
Gilles

46

내가 대부분의 사람들이했던 것을 보았고 (Raspberry Pi 포럼을 보며) 성공을 거 두었던 것은을 사용하고 /etc/rc.local있습니다.

여기서해야 할 일은 ./myscriptrc.local 텍스트 파일에 있습니다. 파이썬에 있다면을 넣으십시오 python myscript.py.

이것은 문자 그대로 "일부"시작 디렉토리에 스크립트를 놓는 것과 같은 간단한 해결책 "입니다."-궁금한 사항이있을 때 포럼에서 검색 할 수도 있습니다.이 솔루션은 구글 검색!


4
참고로 rc.local은 기본적으로 스크립트에 대한 다양한 주석을 가지고 있으며 실행 비트가 변경되어야합니다. 종료 0 전에 스크립트 명령을 입력하면 시작시 실행됩니다. 스크립트가 백그라운드에서 실행을 종료해야합니다. 그렇지 않으면 로그인 프롬프트가 차단됩니다. 네, 제가 한 일입니다.
rob


@rob 스크립트가 실행 파일로 설정되도록 제안 했습니까? 이것은 명령으로 스크립트를 실행함으로써 문제에서 완화됩니다 python myscript.py. 당신이 + X를 chmod를하고 추가하려는 경우 #! /bin/python, 당신은 수행하여 스크립트를 실행할 수있는 $pathtofile/myscript.py$pathtofile입니다 .같은 디렉토리 나 파일의 절대 또는 상대 경로에 있다면.
JFA

1
브라우저와 같은 GUI 프로그램에는 좋지 않습니다. /etc/rc.local시스템 서비스 (사용자 인터페이스가없는 프로그램) 만 시작합니다.
Gilles

1
@ ErickM.Sprengel이 스레드에 대한 정답 중 하나 ( 예 : this)를 사용하십시오 .
Gilles

32

crontab에 추가

crontab은 정의 된 시간에 명령을 실행합니다.


파일을 편집하십시오.

sudo crontab -e

파일에 줄을 추가하십시오 (여기서는 파이썬 스크립트).

@reboot python3 /home/pi/Desktop/exemple.py &

2
여기서 조금만 골라 보면 기술적으로 명령을 실행하는 것은 crontab이 아니라 어쨌든입니다. 목록에 추가 된 행과 관련하여 여기에 정의 된 명령의 전체 경로 (이 경우 전체 경로 python3) 를 입력하는 것이 좋습니다. 여기를 참조 하십시오
Ghanima

이것이 단순하기 때문에 항상 사용했던 방법입니다. +1
Patrick Cook

브라우저와 같은 GUI 프로그램에는 좋지 않습니다. /etc/rc.local사용자 인터페이스가없는 프로그램 만 시작합니다.
Gilles

2
rc.local 및 init.d 및 기타 모든 종류의 작업을 시도하는 데 많은 시간을 소비 한 후 .. 이것은 즉시 작동했습니다! 고마워요!
Piotr Kula

4
이것은 rpi os에서 어떤 이유로 작동하지 않습니다
Denis

11

xorg 앱 자동 시작

시작하려는 스크립트에 xorg 세션이 필요한 경우 사용중인 데스크탑 환경에 따라 작동하거나 작동하지 않을 수 있는 freedesktop 자동 시작 사양 을 따르십시오 .

또는 https://wiki.archlinux.org/index.php/autostarting에 설명 된대로 특정 데스크탑 환경을 대상으로 지정할 수 있습니다 .

시스템 서비스로 스크립트 실행

스크립트가 데몬 또는 '서비스'의 설명에 적합하고 시스템이 raspbian 및 가장 현대적인 linuces의 경우와 같이 systemd 를 실행중인 경우 시스템 서비스로 실행되도록 스크립트를 구성 할 수 있습니다. 수명주기 및 실행 환경은 물론 네트워크 시작 및 실행과 같이 스크립트를 다시 시작하기위한 사전 조건이 있습니다. 실패한 경우 서비스 재시작을 구성 할 수도 있습니다 ( Restart=always예 : 및 재시작 재시작 지연 RestartSec=10).

시스템 전체에서 사용하려면 다음 /etc/systemd/systemvim /etc/systemd/system/autossh.service같이 아래에 시스템 단위 파일을 작성하십시오 .

[Unit]
Description=Autossh keepalive daemon
## make sure we only start the service after network is up
Wants=network-online.target
After=network.target

[Service]
## use 'Type=forking' if the service backgrounds itself
## other values are Type=simple (default) and Type=oneshot
Type=forking
## here we can set custom environment variables
Environment=AUTOSSH_GATETIME=0
Environment=AUTOSSH_PORT=0
ExecStart=/usr/local/bin/ssh-keep-alive.sh
ExecStop=/usr/bin/killall -9 autossh
### NOTE: you can have multiple `ExecStop` lines
ExecStop=/usr/bin/killall ssh
# don't use 'nobody' if your script needs to access user files
# (if User is not set the service will run as root)
#User=nobody

# Useful during debugging; remove it once the service is working
StandardOutput=console

[Install]
WantedBy=multi-user.target

또한보십시오:

이제 서비스를 테스트 할 준비가되었습니다.

systemctl start autossh

서비스 상태 확인 :

systemctl status autossh

서비스 중지

systemctl stop autossh

서비스가 예상대로 작동하는지 확인한 후 다음을 사용하여 활성화하십시오.

systemctl enable autossh

참고 : 보안을 위해 스크립트가 실행 systemd되는 방식과 유사한 제한된 환경에서 crontab스크립트를 실행하므로 기존 시스템 변수에 대해 어떤 가정도하지 마십시오. Environment스크립트에 특정 변수를 정의해야하는 경우 키를 사용하십시오 . set -xbash 스크립트 맨 위에 추가 한 다음 실행 systemctl status my_service하면 스크립트가 실패한 이유를 식별하는 데 도움이 될 수 있습니다. tumb의 원칙으로 항상 echoand를 포함하여 모든 것에 절대 경로를 cat사용하거나 $ PATH를 명시 적으로 정의하십시오.


7

나는 이것이 오래된 질문이지만 일반적으로 자동 시작과 같은 간단한 일을하도록 요청했지만 내 2 센트를 던지고 싶습니다. 이 질문에 대한 모든 답변에서 제안 된 솔루션을 모두 시도했습니다. 그들 중 누구도 나를 위해 일하지 않았습니다. Raspbian과 함께 Raspberry PI Model 2를 사용하고 있습니다.

응용 프로그램을 성공적으로 자동 시작하는 유일한 방법은 다음과 같은 스크립트를 사용하는 것입니다. 잘못된 작업 경로로 시작하는 것과 같은 문제없이 응용 프로그램이 예상대로 시작되었으므로 성공적으로 말합니다.

1. 확장자가 .sh 인 빈 파일을 만들고 원하는 이름을 지정하십시오.

"응용 프로그램 이름"을 방금 만든 스크립트 이름으로 변경 한 것을 제외하고 다음을 정확하게 복사하여 붙여 넣습니다.

 #! /bin/sh

 ### BEGIN INIT INFO
 # Provides:          noip
 # Required-Start:    $remote_fs $syslog
 # Required-Stop:     $remote_fs $syslog
 # Default-Start:     2 3 4 5
 # Default-Stop:      0 1 6
 # Short-Description: Simple script to start a program at boot
 ### END INIT INFO

 #change /direct/path/to/your/application to the path your application is in.
 cd /direct/path/to/your/application      # example cd /home/pi/myprogram/

 #change YourProgramExactName to Exact name of your program that you want to auto start
 ./YourProgramExactName

 exit 0 
  1. 그런 다음 응용 프로그램 폴더 내에 스크립트 파일을 저장하십시오.

  2. 그런 다음 /home/pi/.config/autostart폴더를여십시오. 귀하의 경우에는 다를 수 있습니다. 홈 폴더를 열고 숨겨진 폴더보기를 활성화하십시오. 을 엽니 다 .config/autostart. 자동 시작 폴더가 표시되지 않으면 .config 폴더 내에 autostart라는 폴더를 만듭니다.

  3. 자동 시작 폴더 내에서 다음과 같이 생성 한 스크립트 파일에 대한 바로 가기를 만들어야합니다. 확장명을 가진 빈 파일을 만듭니다 .desktop.

  4. 변경해야합니다 제외하고 복사는 빈 바탕 화면 파일에 다음을 붙여 Comment, Name, Exec, PathIcon필드의 값입니다.

    [Desktop Entry]
    Comment=
    Exec=/path/to/Your/application/Name-of-the-script-file (.sh)
    Icon=/Path/to/Your/application/Icon/IconName
    Name=YourApplicationEXACTNAME
    Path=/Path/to/Your/Application-ONLY
    Type=Application
    
  5. 필요한 모든 필드를 변경 한 후 파일을 저장하고 닫으십시오. 끝났습니다. 그냥 테스트 해보십시오.


기술적 으로이 스크립트는 특정 사용자가 아닌 시스템에서 실행되므로 응용 프로그램이 더 잘 속할 수 있습니다 /usr/local/bin/ApplicationName...?
SlySven

@SlySven "시스템"은 특정 사용자입니다.
제한적 속죄

이 루트로 실행 (UID = 0) 또는 파이 사용자 (UID ~ 500 또는 1000 IIRC) -이 루트 또는 다른로 실행되는 경우 시스템 UID (이하 500) 다음은 전통적으로 스크립트 파일을 저장하는 것이 좋습니다 ( 또는 다른 장치에 문제가있는 home경우 (예 : 별도의 장치 인 경우 ) 루트 장치에 의존 하는 스크립트 또는 실행 파일에 문제가 없을 때 시스템이 단일 사용자 /bin/sh쉘로 장애 복구 ! 요즘은 PID 1이 시작되기 전에 그리고 systemd둘 다 마운트 하는 방법입니다 ...//usr
SlySven

5

나도 이것에 문제가 있었다. Raspbian을 실행하는 Raspberry Pi3에서 이것은 내가 한 일입니다.

  1. 루트 디렉토리에 시작 쉘 스크립트를 작성하십시오 (이름은 "launch"입니다).

sudo leafpad launch.sh

  1. 파일을 저장하십시오
  2. LXDE-pi 자동 시작 파일 편집

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

  1. 해당 파일의 맨 아래에 이것을 추가하십시오

./launch.sh

  1. 재부팅

3

Raspbian Stretch를 실행하는 Raspberry Pi3에서 이것은 내가 한 일입니다.

LXDE-pi 자동 시작 파일 편집

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

해당 파일의 맨 아래에 이것을 추가하십시오

    @sudo python3 /path/to/your/script.py

저장 및 재부팅


1

방법 1 :

로그인시 자동으로 명령을 시작하려면 명령을 이름이 지정된 파일에 넣으십시오.

.bashrc

사용자 디렉토리 (예 : / home / pi)

.bashrc스크립트를 실행하기위한 것이 아닙니다 .

비 로그인 대화식 쉘이 시작될 때마다 실행되며 쉘을 구성하는 데 사용됩니다.
~/.bashrc: executed by bash(1) for non-login shells.

예를 들어, 파일에는

chromium-browser --kiosk www.google.com

www.google.com을 가리키는 Chromium을 전체 화면으로 시작하려면


방법 2 :

이 솔루션은 정말 잘 작동합니다. 브라우저가로드되면 화면 왼쪽 상단에 작은 버그가 표시되어 일반적인 버그 (다른 사람들이 포럼에서 언급 한 것처럼 보임)이지만 그렇지 않으면 전체 화면 모드는 브라우저 페이지를 제외한 모든 것을 숨 깁니다.

자동 시작 파일을 편집하십시오.

sudo nano /etc/xdg/lxsession/LXDE/autostart 

각 줄의 시작 부분에 '#'을 사용하여 모든 것을 주석 처리하고 다음 줄을 추가하십시오.

브라우저 자동 실행

@xset s off
@xset -dpms
@xset s noblank
@midori -e Fullscreen -a http://google.com

필요한 경우 구성 도구를 사용하여 전원을 켤 때 GUI 자동 실행을 활성화하십시오.

sudo raspi-config

명령 프롬프트로 다시 종료해야하는 경우 CTRL+ ALT+F1

CTRL+ ALT+F2


0

스크립트를 /etc/profile파일 맨 아래에 둘 수 있습니다.

다른 옵션은 저에게 효과가 없었지만, 스크립트를 데스크탑에 두었 기 때문일 수 있습니다.


0

'python /path/to/your/script.py'유형의 'sudo nano /etc/rc.local'명령으로 .sh 파일을 만들고 .sh 파일의 경로를 입력하십시오.

전에

exit 0

아니면 그냥 입력해도됩니다

crontab -e

또는

sudo crontab -e 

시작할 때 스크립트를 실행하려는 경우

파일 형식 안에

@reboot python /path/to/your/script.py &

2
crontab 항목 에는 전체 경로 를 사용하는 것이 좋습니다.
Ghanima

-2

그것은 작동합니다. (재부팅 할 때마다 다음 제출물을 자동으로 준비합니다)

$ cat /etc/rc.local
#!/bin/sh -e
echo "18" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio18/direction
echo "1" > /sys/class/gpio/gpio18/value
exit 0

-2

이것이 내가 일반적으로하는 일입니다.

  1. 파일을 raspberry pi 홈 디렉토리에 저장하십시오. 예 : mycode.py
  2. 파일을 편집하십시오.

    sudo nano .bashrc

.bashrc스크립트를 실행하기위한 것이 아닙니다 .

비 로그인 대화식 쉘이 시작될 때마다 실행되며 쉘을 구성하는 데 사용됩니다.
~/.bashrc: executed by bash(1) for non-login shells.

  1. 파일의 끝으로 가서 다음을 작성하십시오.

    sudo python mycode.py

  2. 출력을 txt 파일에 저장하려면 3 단계에서 다음과 같이 코드를 편집하십시오.

    sudo python mycode.py >> output.py

도움이 되었기를 바랍니다!

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