부팅시 /etc/init.d에서 스크립트를 시작하려면 어떻게해야합니까?


83

나는 이것에 대해 잠시 동안 무언가를 읽은 것 같지만 그것이 어떻게 이루어 졌는지 기억할 수 없습니다. 기본적 /etc/init.d으로 부팅시 자동으로 시작 하려는 서비스가 있습니다. 스크립트와 /etc/rc.d디렉토리 를 연결하는 것과 관련이 있지만 현재는 기억할 수 없습니다. 이것에 대한 명령은 무엇입니까?

저는 Fedora / CentOS 파생 상품을 사용하고 있다고 생각합니다.


OS에 따라 다릅니다. 어떤 유닉스 변종을 실행하고 있습니까? 리눅스라면 어떤 배포판입니까? 사이에게 어떤을 /etc/init, /etc/init.d, /etc/rc.d, /etc/rc.local등 몇 가지가 있나요?
Gilles

1
나는 CentOS 또는 이와 비슷한 것을 생각합니다. 데비안에서는 답이 다릅니 까? 데비안 솔루션에도 관심이 있습니다.
Naftuli Kay

답변:


109

언급 한 바와 같이 Red Hat 기반 시스템에있는 경우 다음을 수행 할 수 있습니다.

  1. 스크립트를 작성하고 /etc/init.d(예 :)에 배치하십시오 /etc/init.d/myscript. 스크립트는 다음 형식이어야합니다.
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....

# Source function library.
. /etc/init.d/functions

start() {
    # code to start app comes here 
    # example: daemon program_name &
}

stop() {
    # code to stop app comes here 
    # example: killproc program_name
}

case "$1" in 
    start)
       start
       ;;
    stop)
       stop
       ;;
    restart)
       stop
       start
       ;;
    status)
       # code to check status of app comes here 
       # example: status program_name
       ;;
    *)
       echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0 

형식은 매우 표준이며에서 기존 스크립트를 볼 수 있습니다 /etc/init.d. 그런 다음 so /etc/init.d/myscript start또는 처럼 스크립트를 사용할 수 있습니다 chkconfig myscript start. ckconfig매뉴얼 페이지에는 스크립트의 헤더를 설명합니다 :

 > This says that the script should be started in levels 2,  3,  4, and
 > 5, that its start priority should be 20, and that its stop priority
 > should be 80.

시작, 중지 및 상태 코드 예제는에 정의 된 도우미 함수를 사용합니다. /etc/init.d/functions

  1. 스크립트 활성화

    $ chkconfig --add myscript 
    $ chkconfig --level 2345 myscript on 
    
  2. 스크립트가 실제로 활성화되어 있는지 확인하십시오. 선택한 레벨에 "on"이 표시되어야합니다.

    $ chkconfig --list | grep myscript
    

3
Chkconfig는 당신이 원하는 것입니다. +1
whoami

런레벨 2, 3, 4, 5에서 init가 무언가를 시작한 이유는 무엇입니까? 런레벨 2에서 서버가 시작되지 않도록주의해야합니까? 그리고 런레벨 4는 RHEL에 정의되어 있지 않으므로 왜 런레벨에서 시작해야합니까? 비판이 아니라 알고 싶어합니다. 저는 슬랙웨어 네이티브 사용자입니다.
Bruce Ediger

4는 RHEL에 정의되어 있지 않지만 존재합니다. 당신은 자신의 것을 위해 그것을 훔칠 수 있습니다.
Kevin M

헤더는 chkconfig 매뉴얼 페이지에서 가져옵니다. 나는 대부분의 경우 개인적으로 235 또는 35를 고수합니다.
canen

시작하는 동안 무언가가 시작되지 않으면 볼 수있는 로그가 있습니까?
Utkarsh Sinha

10

머신이 일반적으로 시작하는 런레벨을 테스트합니다.

runlevel

종종 이것은 5 또는 2입니다-다양한 규칙이 있지만 실제로 확립 된 것은 없습니다. 우분투는 2를 사용하지만 이전에 사용한 배포판은 항상 사용했습니다.

  • 단일 사용자 1 명 (슈퍼 사용자)
  • 2 명의 다중 사용자
  • 3 명의 다중 사용자 + 네트워크
  • 4 미사용 / 사용자 정의 가능
  • 5 명의 다중 사용자, 네트워크 + X11

그럼 당신은 아마 당신의 초기화 스크립트에서 심볼릭 링크를 만들기 /etc/init.d/foobar/etc/rc2.d/SXYfoobar

S는 '이 런레벨에서이 스크립트를 시작합니다 (여기서는 2)를 의미합니다. XY는 두 자리 십진수이며 시퀀스와 관련이 있으며 스크립트가 시작됩니다.

스크립트 S45barfoo를 실행하기 전에 실행하고 S55foofoo가 스크립트에 따라 달라지는 경우 45에서 55 사이의 xy를 선택합니다. 같은 수의 부팅 순서는 정의되지 않습니다.

한편 우분투는라는 다른 시작 절차로 전환했습니다 upstart.

그리고 참고 : 항상 링크가 링크되는 것은 아닙니다. /etc/rcX.d때로는 링크 /etc/init/rcX.d와 유사하지만 / etc 아래의 어딘가에서 쉽게 찾을 수 있습니다.

시작 스크립트의 끝에서 무언가를 시작하려면 찾고자하는 /etc/rc.local파일이되지만 이미 실행중인 X11에 의존하는 경우 데스크탑 환경의 자동 시작 옵션 또는 /etc/X11/Xsession.d/설명 된 것과 유사한 패턴을 찾을 수 있습니다 위.

네트워크가 작동중인 경우 별도의 디렉토리 (if-up.d)와 외부 USB 드라이브와 같은 마운트 된 장치가 있습니다 /etc/udev/rules.d/.


심볼릭 링크를 수행하는 명령이 없습니까? 나는 그런 것을 기억한다고 생각했다.
Naftuli Kay

1
그렇지 update-rc.d않습니까?
Naftuli Kay

GUI 또는 명령 줄? DE는 런레벨을 표시하는 도구를 제공하여 스크립트를 시작 또는 중지 할 위치를 지정할 수 있습니다. 나는 그런 것을 보았지만 이름과 번호 (xy)를 지정하는 방법을 기억하지 못합니다.
사용자가 알 수 없음

커맨드 라인. 심볼릭 링크를 처리하고 특정 스크립트 실행 여부를 전환 할 수 있습니다.
Naftuli Kay

3

Naftuli Tzvi Kay가 위의 데비안에 대해 물었을 때 : 데비안 6부터는 스크립트에 의존성과 기능을 나타내는 LSB (Linux Standards Base) 헤더가 포함되어 있어야합니다 ( 데비안 위키 페이지 참조 ).

LSB 헤더가 있으면 insserv부팅 프로세스에 스크립트를 포함시키는 데 사용할 수 있습니다 ( 다른 데비안 위키 페이지 참조 ).

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