부팅시 응용 프로그램을 자동으로 시작하는 방법 자동으로 시작하려고합니다. 문서 여기가 받는 시작 스크립트를 복사

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

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

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

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



답변

다음은 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

답변

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


답변

인수로 시작 응용 프로그램을 관리하고 기록하는 효과적인 프로그램 인 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


답변

사용 crontab이 훨씬 쉽습니다.

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

@reboot <command>

예 :

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

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


답변

@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부팅시 시작할 수 있도록 명령 을 실행하십시오 .