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

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

얼마 전에 이에 관한 내용을 읽은 것 같은데 어떻게 되었는지 기억이 나지 않습니다. 기본적으로 /etc/init.d부팅 시 자동으로 시작하려는 서비스가 있습니다 . 스크립트를 디렉토리에 심볼릭 링크하는 것과 관련이 있었던 것으로 기억 /etc/rc.d하지만 지금은 기억이 나지 않습니다. 이 명령은 무엇입니까?

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

답변1

언급한 대로 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같은 스크립트를 사용할 수 있습니다 . 매뉴얼 페이지에서는 스크립트 제목을 설명합니다./etc/init.d/myscript startchkconfig myscript startckconfig

 > 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
    

답변2

머신이 일반적으로 부팅되는 런레벨을 테스트합니다.

runlevel

일반적으로 이는 5 또는 2입니다. 다양한 규칙이 있지만 제가 아는 한 실제로 명확한 것은 없습니다. Ubuntu는 2를 사용하지만 이전 배포판은 항상 사용했습니다.

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

그런 다음 초기화 스크립트에서 심볼릭 링크를 만듭니다 /etc/init.d/foobar./etc/rc2.d/SXYfoobar

S는 "이 실행 수준(여기서는 2)에서 이 스크립트를 시작합니다"를 의미합니다. XY는 스크립트가 시작되는 순서와 관련된 두 자리 십진수입니다.

이전에 실행되는 S45barfoo 스크립트에 의존하고 S55foofoo가 스크립트에 의존하는 경우 45에서 55 사이의 xy를 선택할 수 있습니다. 동일한 번호의 경우 부팅 순서가 정의되지 않습니다.

동시에 Ubuntu는 upstart.

참고: 항상 연결되어 있지는 않습니다 /etc/rcX.d. 때로는 연결되거나 /etc/init/rcX.d유사하지만 /etc 아래 어딘가에서 쉽게 찾을 수 있어야 합니다.

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

제대로 작동하기 위해 네트워크에 의존하는 경우 마운트된 장치(예: 외부 USB 드라이브)에 대한 별도의 디렉터리(if-up.d)가 있습니다 /etc/udev/rules.d/.

답변3

/etc/fstab이 답변에서는 Ubuntu 시스템의 서비스 스크립트를 통해 정의된 Windows 공유(CIFS)를 마운트한다고 가정해 보겠습니다 . 먼저 mount -a -t cifs아래 /etc/init.d/mountcifs내용으로 항목을 만듭니다.

#! /bin/sh
### BEGIN INIT INFO
# Provides:          mountcifs
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Mounts / Umounts Window Shares (CIFS)
# Description: Mounts / Umounts Window Shares (CIFS)
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/lsb/init-functions

case "$1" in
  start)
        mount -a -t cifs
        ;;
  stop)
        umount -a -t cifs
        ;;
  restart|reload|force-reload)
        umount -a -t cifs
        mount -a -t cifs
        ;;
  *)
        # echo "Usage: $0 start|stop" >&2
        # exit 3
        ;;
esac

/etc/init.d/mountcifs사용할 수 있는지 확인하십시오 chmod 755 /etc/init.d/mountcifs.

# Default-Start: 2 3 4 5댓글에 참고해주세요 . 이 설명 덕분에 다음 명령을 사용하여 Ubuntu에 및 폴더에 심볼릭 링크를 생성하도록 지시할 /etc/rc2.d/etc/rc3.d있습니다 /etc/rc4.d./etcrc5.d

sudo update-rc.d mountcifs defaults

그런 다음 다음과 같이 스크립트를 테스트할 수 있습니다.

sudo service start mountcifs
df -h # should see Windows Shares
sudo service stop mountcifs
df -h # all Windows Shares should be gone
sudo service start mountcifs
df -h # all Windows Shares should be back

Windows 공유는 재부팅 시 자동으로 마운트되어야 합니다.

답변4

Naftuli Tzvi Kay가 위에서 Debian에 대해 물었던 것처럼: Debian 6부터 스크립트에는 종속성과 기능을 나타내는 LSB(Linux Standard Library) 헤더가 포함되어야 합니다(데비안 위키 페이지를 참조하세요).

LSB 헤더가 있는 경우 다음을 insserv사용하여 부팅 프로세스에 스크립트를 포함할 수 있습니다.다른 데비안 위키 페이지 보기).

관련 정보