부팅시 응용 프로그램을 자동으로 시작하는 방법


26

나는 Linux를 처음 사용하고 응용 프로그램을 시작할 것을 기대합니다 (10 초마다 led를 토글합니다). 응용 프로그램을 작성했으며 정상적으로 작동하지만 부팅시 자동으로 시작하려고합니다.

문서 여기가 받는 시작 스크립트를 복사 말한다 /etc/init.d에 복사 한 스크립트에 심볼릭 링크를 디렉토리를 만들 rc.d디렉토리.

이 스크립트 파일의 확장자와 이름은 무엇입니까? 심볼릭 링크를 수동으로 추가 할 수 있습니까, rc.d아니면 이에 대한 특정 절차가 있습니까?

그것을 달성하는 방법에 대한 제안?


init 스크립트를 시작에 추가하는 기본 방법은 배포판에 따라 다릅니다. 일부는 심지어 시작과 시스템화를 위해 그들을 페이징하고 있습니다. 데비안과 같은 start-stop-daemon프로그램이 더 잘 처리하기 때문에 단순히 "&"를 백그라운드로 사용하는 것은 좋지 않습니다 (프로그램 자체가 디먼을 선호하지만). 어떤 배포판을 사용하고 있습니까? 데스크탑 MIME 유형 이외의 파일 확장자는 * nix에서 의미가 없으며 실행 파일에 파일 확장자가없는 것이 좋습니다.
jordanm

petalogix를 사용하는 경우 해당 설명서를 따르십시오. 특별한 이름은 필요하지 않습니다. 해봤 어? 어떤 문제가 있습니까? (그렇지 않으면 배포판을 지정하고 시도한 것과 작동하지 않는 것을 설명하십시오.)
Mat

RPi에 데비안“wheezy”를 사용하고 있습니다.
협곡

1
당신이 그것을 할 필요가있는 경우 10 초마다 (날카로운 즉,하지 10 초), 당신은 사용 할 수 있습니다 cron대신.
peterph

@ peterph : 그러나 프로그램은 10 초마다 실행되는 프로그램이 아니라 10 초마다 LED를 토글하는 것처럼 들립니다.
Zorawar

답변:


19

다음은 http://www.debian-administration.org/articles/28 에서 발췌 한 것으로 귀하의 질문에 대한 답변입니다.

참고 : 아래 예제 스크립트에서 " start)"섹션에 대한 호출을 추가 하여 실제로 프로그램을 시작하십시오. 시스템을 재부팅하지 않고도 스크립트 기능을 테스트 할 수 있습니다. 전체 경로로 호출하고 " start"또는 " stop" 매개 변수를 지정하십시오.

간다 :

데비안은 시스템 런레벨이 변경 될 때 (예 : 부팅 및 종료 시간) 명령을 실행하기 위해 init 시스템과 같은 Sys-V를 사용합니다.

시스템 부팅시 시작할 새 서비스를 추가하려면 디렉토리에 필요한 스크립트를 추가해야합니다 /etc/init.d/. 해당 디렉토리에 이미 존재하는 많은 스크립트는 수행 할 수있는 작업의 예를 보여줍니다.

다음은 두 부분으로 나누어지는 매우 간단한 스크립트입니다. 항상 실행되는 코드와 "start"또는 "stop"으로 호출 될 때 실행되는 코드입니다.

#! /bin/sh
# /etc/init.d/blah
#

# Some things that run always
touch /var/lock/blah

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting script blah "
    echo "Could do more here"
    ;;
  stop)
    echo "Stopping script blah"
    echo "Could do more here"
    ;;
  *)
    echo "Usage: /etc/init.d/blah {start|stop}"
    exit 1
    ;;
esac

exit 0

파일을 올바른 위치에 저장 한 후 " chmod 755 /etc/init.d/blah"를 실행하여 파일이 실행 가능한지 확인하십시오 .

그런 다음 시스템이 다운되거나 가동 될 때 스크립트가 실행되도록 적절한 기호 링크를 추가해야합니다.

가장 간단한 방법은 데비안 특정 명령을 사용하는 것입니다 update-rc.d.

root@skx:~# update-rc.d blah defaults
 Adding system startup for /etc/init.d/blah ...
   /etc/rc0.d/K20blah -> ../init.d/blah
   /etc/rc1.d/K20blah -> ../init.d/blah
   /etc/rc6.d/K20blah -> ../init.d/blah
   /etc/rc2.d/S20blah -> ../init.d/blah
   /etc/rc3.d/S20blah -> ../init.d/blah
   /etc/rc4.d/S20blah -> ../init.d/blah
   /etc/rc5.d/S20blah -> ../init.d/blah

실제로이 스크립트를 etc / init.d /에 배치해야합니까 또는 상단의 # /etc/init.d/blah 행이 쉘의 위치를 ​​나타 냅니까?
user137717

"-sh : update-rc.d : command not found"가 표시됩니다
m4l490n

2
최신 시스템 systemd은 부팅 구성을 포함하여 많은 용도로 사용됩니다. systemctl제어 및 구성에 사용 합니다 systemd.
Alexander Shcheblikin

4

가장 좋은 방법은 일반적인 시스템 서비스 (예 : OpenSSH)의 배포 패키지 소스를 확인하는 것입니다. 모범 사례가 무엇인지 알 수 있습니다. 결국 오픈 소스의 배후에있는 이유 중 하나는 소스에서 배울 수 있기 때문입니다.


2
훌륭한 조언! 참으로 현명하고 관련성이 있으며 모든 Distos에 맞게 조정되었습니다. (그리고
실수로

3

인수로 시작 응용 프로그램을 관리하고 기록하는 효과적인 프로그램 인 Supervisor를 사용하십시오. http://supervisord.org/running.html 에서 자세히 알아보고 설치 지침을 따르십시오.

conf 파일을 /etc/supervisor/conf.d/{PROGRAM_NAME}.conf만들고 여기에 코드가 있습니다.

[program:{PROGRAM_NAME}]
command=/usr/bin/{PROGRAM_NAME} -arg1 -arg2
autostart=true  
autorestart=true  
stderr_logfile=/var/log/supervisor/{PROGRAM_NAME}.err.log  
stdout_logfile=/var/log/supervisor/{PROGRAM_NAME}.out.log  

그런 다음 cmd 줄에서 실행하십시오.

supervisorctl reload


당신의 대답은 괜찮 반면, 나는 당신이 "supervisorctl 다시로드"를 보여주기 위해 변경해야한다고 생각하는 것은의 .conf 파일에 삽입 아니라, CLI에서 실행하는 것입니다
dlewin

3

사용 crontab이 훨씬 쉽습니다.

crontab -e사용자의 crontab을 편집하는 데 사용 합니다.
끝에 다음 줄을 추가하십시오.

@reboot <command>

예 :

  • @reboot my_script.sh
  • @reboot python my_script.py arg1 arg2

마지막으로 crontab -l스크립트가 목록에 추가되었는지 확인하십시오.


이 답변이 다운 보트를받은 이유가 궁금합니다. 매우 간단한 솔루션과 crontab을 사용하는 솔루션처럼 보입니다. 아마도 모두 이미 알고 이해하고 있습니다.
kolinko

1

@AlexanderShcheblikin이 말한 것처럼 최신 버전의 Linux 지원 systemd . 데비안 전용 솔루션보다 더 많은 기능을 가지고 있으며 이식성이 뛰어납니다.

이 위대한 가이드를 읽으십시오 .

다음은 필요한 최소값에 대한 빠른 참조입니다 .

  1. myscript.sh실행 권한이 있는 스크립트 (예 :)
  2. 스크립트 실행 명령이 포함 된 644 권한의 myservice.service확장자가 ".service"인 단위 파일 (예 :) /etc/systemd/system예를 들어

:

[Unit]
Description=Example systemd service.

[Service]
Type=simple
ExecStart=/bin/bash /path/to/myscript.sh

[Install]
WantedBy=multi-user.target
  1. sudo systemctl enable myservice부팅시 시작할 수 있도록 명령 을 실행하십시오 .
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.