본문 바로가기

Linux

[linux]chkconfig 등록 및 활용

[출처]

 http://blog.naver.com/couplewith/60007889350


[개요]

 mysql이나 apache와 같이 사용자가 직접 설치한 프로그램들을 부팅시 자동으로  실행하기 위해서는 chkconfig와 ntsysv를 사용한다.

 

chkconfig를 알기 전에 runlevel과 init.d 그리고 setup과 같은 로딩 서비스 관리 툴의 연관을 이해 하여야 겠습니다.

 

가. About Run-level ?  

    리눅스나 유닉스는 runlevel이라는것이 존재 한다.

    일반적으로 Window 에서 Safe 모드와 prompt모드와 일반 모드로

    부팅시 선택 할수 있듯이, unix도 다양한 구동 방식이 존재한다

    이것을 runlevel 이라고 하며 부팅시 선택 되도록 되어있다.

 

    그리고 슈퍼관리자를 위해서 콘솔에서 직접  /sbin/init 라는 명령으로 제어가 가능하다.

    > init 6 : 리부팅 시스널을 일으키고

    > init 0 : 라고 하면 시스템이 halt 되거나 power를 내린다.

 

    부팅시 선택 되도록 설정한 환경은

    /etc/inittab 라는 파일에 다음과 같이 명시되어 있다

 

$> vi /etc/inittab

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)

id:3:initdefault:

 

id:3:initdefault: 에서 3 이라고 명시 하면  Full multiuser mode 로 text 기반 콘솔로 로딩이 된다

id:5:initdefault:  로 설정 하면 Full multiuser mode  + X11 로 로딩 되며, [GUI] 기본 콘솔이 Xwindow ,그놈 같은 콘솔을 사용 할수 있다.

/sbin/runlevel 라는 명령은 N 3 과 같이 현재 설정된 runlevel를 알려 줍니다.

 

그리고 runlevel이 선택 되면 각 레벨에 따라 설정된 프로그램 들이 로딩되게 됩니다.

이들은 각각 디렉 토리로 분류하여 스크립트로 정의 되어 있습니다.

/etc/rc.d/init.d 에는 부팅시 사용 할수 있는 전체 서비스 로딩 스크립트들이 있습니다.

그리고 /etc/rc1.d /etc/rc2.d /etc/rc3.d .... 등으로 runlevel 마다 별도의 디렉 토리가 있고

이들은 구동할수 있는  서비스들을 K10xfs -> ../init.d/xfs 와 같이 init.d의 파일을 링크해 두었습니다.

 

. About ntsysv ?    

    리눅스 서비스 관리를 하게 되면 기본적으로  아래 3가지 툴을 알아야 한다.

    그리고 이들을 이용해서 관리를 하기 위한 기본적인 지식을 경험 하다보면

    아래 chkconfig 를 쓸 일이 생길 것입니다.

$> setup

    Setup    :Text Mode Setup Utility 로 아래 5가지 섹션을 관리 하는 메인이다.

             1. Authentication configuration  

             2. Firewall configuration
             3. Mouse configuration

             4. Network configuration

             5. System services

    netconfig :  위 setup의  4. Network configuration 와 같다

    ntsysv     :   위 setup의  5. System services 와 같다

 

    따라서 어렵게 여러게 알기 힘들면 setup 이라는게 있구나. 

    ntsysv 같은 것은 일반 사용자들이 chkconfig를 쉽게 쓰도록 만든 프로그램이라고 보면 된다.


다. About chkconfig ?

 mysql 이나 apache 같은 사용자가  설치한 프로그램 들을 부팅시 자동으로  실행 하기 위해서 이 프로그램을 사용한다.


 chkconfig는 /etc/rc.dinit.d/ 에 명시 되지 않은 서비스는 설정이 안된다.

 먼저  /etc/rc.d/init.d 에 해당 스크립트를 생성 하여 두어야 한다.

 

 다음은 chkconfig에 대한 맨페이지 설명이다.

 

$> man chkconfig

 NAME                
       chkconfig  -  updates  and queries runlevel information for system services

       시스템 서비스의 runlevel 정보를 수정 하고 조회 하는 유틸리티이다.

       

 SYNOPSIS

      다음과 같은 옵션 들을 가지 고 있으며
       chkconfig --list [name]
       chkconfig --add name
       chkconfig --del name
       chkconfig [--level levels] name <on|off|reset>
       chkconfig [--level levels] name

 

 OPTIONS
       --level levels
              Specifies the run levels an operation should pertain to.

              It  is given  as  a string of numbers from 0 to 7. For example, --level
              35 specifies runlevels 3 and 5.

              조회 수정 대상이 되는 runlevel을 지정 하는 옵션이다.

             0 부터 7 까지 부여 할수 있고, 두개 이상일 경우 --level 35 라고 하면

            runlevel 3 과 5를 동시에 지정한다는 의미이다.

 

       --add name

              This option adds a new  service  for  management  by  chkconfig.
              새로운 서비스 entry 를 추가하기위한 옵션이다.

              When  a new service is added, chkconfig ensures that the service
              has either a start or a kill entry in  every  runlevel.

              새로운 서비스가 추가 될때 모든 runlevel에서 start와 kill이 가능한지 점검하고

            

             If  any  runlevel  is missing such an entry, chkconfig creates the appro-
              priate entry as specified by the  default  values  in  the  init script.

 

              chkconfig 는 init 스크립트에 다음과 같은 entry를 검사한다.

             그리고 없는 것에 대해서 경고를 하게 된다.

             # chkconfig: - 50 50
             # description: init file for Apache2 server daemon
             # processname: /usr/local/apache2/apachectl
             # config:      /usr/local/apache2/conf/httpd.conf
             # pidfile:     /usr/local/apache2/logs/httpd.pid

             같은 부분이 필요하다.

 

       --del name
              The  service  is removed from chkconfig management, and any sym-
              bolic links in /etc/rc[0-6].d which pertain to it are removed.

              각 runlevel /etc/rc[0-6].d 에 속하는  해당 서비스 링크를 삭제 한다.

 

       --list name
              This option lists all of  the  services  which  chkconfig  knows
              about, and whether they are stopped or started in each runlevel.
              If name is specified, information in only display about  service name.
            

 

라. 사용 예제 [apache 자동 수행]

 

Apached 를 등록 하여 부팅시 자동 수행 되도록 해보자

 

step 0) chkconfig 로 서비스 확인 하기

 

$> chkconfig --list

  아래와 같이 각 runlevel 에 설정된 서비스 목록 을 볼수 있다.

  구동 하고자 하는 서비스의 등록 상태를 확인하자.

  현재 apached 가 없다는 것을 확인 할 수 있다.

  

$> chkconfig --list

dkms_autoinstaller      0:off   1:off   2:on    3:off   4:on    5:on    6:off
kudzu           0:off   1:off   2:off   3:off   4:on    5:on    6:off
syslog          0:off   1:off   2:on    3:on    4:on    5:on    6:off
netfs           0:off   1:off   2:off   3:off   4:on    5:on    6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
random          0:off   1:off   2:on    3:off   4:on    5:on    6:off
rawdevices      0:off   1:off   2:off   3:off   4:on    5:on    6:off
pcmcia          0:off   1:off   2:on    3:off   4:on    5:on    6:off
saslauthd       0:off   1:off   2:off   3:off   4:off   5:off   6:off
keytable        0:off   1:on    2:on    3:off   4:on    5:on    6:off
apmd            0:off   1:off   2:on    3:off   4:on    5:on    6:off
atd             0:off   1:off   2:off   3:off   4:on    5:on    6:off
gpm             0:off   1:off   2:on    3:off   4:on    5:on    6:off
autofs          0:off   1:off   2:off   3:off   4:on    5:on    6:off
iptables        0:off   1:off   2:on    3:off   4:on    5:on    6:off
irda            0:off   1:off   2:off   3:off   4:off   5:off   6:off
nscd            0:off   1:off   2:off   3:off   4:off   5:off   6:off
isdn            0:off   1:off   2:on    3:off   4:on    5:on    6:off
sshd            0:off   1:off   2:on    3:off   4:on    5:on    6:off
portmap         0:off   1:off   2:off   3:off   4:on    5:on    6:off
nfs             0:off   1:off   2:off   3:off   4:off   5:off   6:off
nfslock         0:off   1:off   2:off   3:off   4:on    5:on    6:off
sendmail        0:off   1:off   2:on    3:off   4:on    5:on    6:off
rhnsd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
anacron         0:off   1:off   2:on    3:off   4:on    5:on    6:off
xfs             0:off   1:off   2:on    3:off   4:on    5:on    6:off
xinetd          0:off   1:off   2:off   3:on    4:on    5:on    6:off
vsftpd          0:off   1:off   2:off   3:on    4:off   5:off   6:off
snmpd           0:off   1:off   2:off   3:on    4:off   5:off   6:off
raidmon         0:off   1:off   2:on    3:on    4:on    5:on    6:off
xinetd based services:
        chargen-udp:    off
        rsync:  on
        chargen:        off
        daytime-udp:    off
        daytime:        off
        echo-udp:       off
        echo:   off
        services:       off
        servers:        off
        time-udp:       off
        time:   off
        sgi_fam:        off
        telnet: on

 

(step 1) init 스크립트 생성하기

 apache 나 mysql같은 프로그램이 구동 될수 있도록 init 스크립트를 만들어야 한다.

 cp /etc/rc.d/init.d/sendmail /etc/rc.d/init.d/apached 라는 스크립트로 이름을 바꾸어 보자.


 apached 라는 스크립트 에 apacehclt start 와 stop restart 를 쓸수 있도록  수정 하자.


$> cd /etc/rc.d/init.d

$> vi ./apached 

#!/bin/bash
#
# chkconfig: - 50 50
# description: init file for Apache2 server daemon

# processname: /usr/local/apache2/apachectl
# config:      /usr/local/apache2/conf/httpd.conf
# pidfile:     /usr/local/apache2/logs/httpd.pid
#
# source function library
. /etc/rc.d/init.d/functions

# pull in sysconfig settings


RETVAL=0
prog="apaceh2"

# Some functions to make the below more readable
APACHE2_HOME=/usr/local/apache2
APACHED=$APACHE2_HOME/bin/apachectl

start()
{
        # Create keys if necessary
        echo -n $"Starting $prog :"
        sh $APACHED start && success || failure
        RETVAL=$?
        return $RETVAL
}

stop()
{
        echo -n $"Stopping $prog:"
        sh  $APACHED stop && success || failure
        RETVAL=$?
        return $RETVAL
}


case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        restart)
                stop
                start
                ;;
        *)
                echo $"Usage: $0 {start|stop|restart}"
                RETVAL=1
esac
exit $RETVAL


[주의 사항]

# chkconfig: - 50 50
# description: init file for Apache2 server daemon

 

이부분이 반드시 있어야 하며 없으면

service a does not support chkconfig 라는 에러가 난다.

 

$> chmod +x apached

 실행이 가능 하도록 파일 실행 권한을 부여한다.

 

(step 2) chkconfig 로 서비스 관리 하기

$> chkconfig --add apached

    라고 하면 모든 서비스 목록에 추가 될것이다.

$> chkconfig --del apached

    라고 하면 모든 서비스 목록에 삭제 될것이다.

 

$> chkconfig --add apached

$> chkconfig --list |grep apached

apached         0:off   1:off   2:off   3:off   4:off   5:off   6:off

  라고 설정 된것을 확인 할수 있다.

 

$> chkconfig --level 35 apached on

   는 chkconfig --level 3 apached on 와 chkconfig --level 5 apached on

   를 동시에 수행 한것과 같습니다.

 

root]# chkconfig --list | grep apached

apached         0:off   1:off   2:off   3:on    4:off   5:on    6:off


(step 3) ntsysv 로 서비스 관리 하기

 

ntsysv로도 위의 내용을 변경 가능 하다.

다만 ntsysv의 경우  목록에 보이지 않으면

먼저 chkconfig --add NAME 로 해당 서비스를 각 runlevel에 등록 해야 한다.

 

root#> ntsysv --level 35

 로 화면에서 apached를 '*' 로 선택(스페이스키) 하면

 chkconfig --level 35 apached on 와 같은 결과를 같게 됩니다.

 

[결론]

    이상으로 프로그램 실습을 마치며, 위의 설정을 이해한 후 리눅스 상에서 프로그램 자동 실행 시키는데 유용하게 사용하길 바랍니다