학습자료(~2017)/리눅스

[리눅스] 자동 실행, 자동 스크립트

단세포소년 2012. 8. 27. 21:18
반응형

init script 작성법 : http://shahmirj.com/blog/the-initd-script



/etc/rc.d/rc.local 

/etc/rc.d/rc.local 파일에 실행할 명령을 넣어주면 부팅시마다 해당 명령을 실행한다.

시스템 부팅시 root 권한으로 실행되며 root 가 아닌 foo 사용자로 실행을 해야한다면

sudo -u foo /usr/bin/command 이런석으로 입력해놓으면 된다. 



/etc/crontab 

 월, 시, 분, 주  단위로 주기적으로 프로그램이 실행되어야 할때 이 파일에 등록하면된다.

윈도우의 예약작업 같은 것이다. 예를 들어 하루마다 데이터를 백업하거나 업데이트를 해야한다면 이곳에 등록해 놓으면 된다.



/etc/fstab

리눅스에 mount 명령으로 디렉토리와 파일시스템을 마운트했을때 시스템이 재부팅하게 되면 마운트는 해제된다.

시스템 부팅시 자동으로 마운트를 하게 하려면 /etc/fstab 에 이를 등록하면 된다. 



 /etc/xineetd.d/  , /etc/xinetd.conf

슈퍼데몬이라고 해서 imap, sndmail 같이 지속적으로 서비스를 하는 데몬이 아니라 요청에 의해서만 실행되어 응답을 해주면 되는 서버데몬같은 것은 이곳에 등록한다. 자세한 것은 구글링을 해보아라. 



 서비스 설정 chkconfig

시스템 run level

/etc/inittab

#   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) 다중 사용자 텍스트 모드
#   하지만 NFS를 쓰지 않는다.
#   3 - Full multiuser mode 다중 사용자 텍스트 모드
#   4 - unused 사용하지 않는다.
#   5 - X11 다중사용자 X windows 모드
#   6 - reboot (Do NOT set initdefault to this) 재가동 모드

# 아래는 시스템 부팅 기동 레벨이다. 5는 X windows 이다. (대개 레벨5나 3을 사용한다.)
id:5:initdefault:


chkconfig // 서비스 설정하기

chkconfig 는 서비스를 쉽게 등록 , 삭제 혹은 특정 런레벨에서 실행시킬지 실행시키지 않을지를 설정하게 해주는 유틸이다.

chkconfig 를 하기전에는 우선 /etc/rc.d/init.d/ 에 실행시킬 스크립트를 넣어주어야 한다. (chkconfig --add 명령어는 /etc/rc.d/init.d/ 디렉토리를 검색한다.)

chkconfig [--level <levels>] [--type <type>] <name> <on|off|reset|resetpriorities>  를 실행하면 /etc/rc.d/init.d/ 에 있는 서비스가 등록된다.

예를 들어 chkconfig --level 3 test on 이라고 실행시키면

test 란 스크립트가 서비스에 등록된다. 

chkconfig는 단순하다  level 에 맞는 폴더에 /etc/rc.d/init.d/ 내의 스크립트의 심볼릭 링크를 생성할 뿐이다.

/etc/rc3.d/ 는 레벨 3에 대한 실행 스크립트가 들어있다.

lrwxrwxrwx.  1 root root   17 Dec  7 09:13 K90network -> ../init.d/network

lrwxrwxrwx.  1 root root   17 Apr  4 19:40 S01sandbox -> ../init.d/sandbox

lrwxrwxrwx.  1 root root   17 Jan 15 10:44 S20vboxdrv -> ../init.d/vboxdrv

보면 알겠지만  on 이라고 한 것은 어두에 S , off 라고 한것은 K 그리고 숫자  그 다음 서비스명이 온다.
S01sandbox 를 보면 ../init.d/sandbox 와 연결되어있고 S가 붙어 있다는 것은 부팅시 자동 실행된다는 것이다. 01 숫자는 실행 우선순위를 뜻한다.

즉 다시말해 chkconfig 는 단순히 /etc/rc.d/init.d 에 있는 스크립트를 런레벨에 맞게 /etc/rc[n].d 라는 폴더에 자동으로 만들어줄 뿐이다. 사용자가 불편하게 하던 동작을 간단하고 쉽게 대신해주는 유틸이다.

서비스를 등록하기 전에 서비스 스크립트 예제이다.
아래의 형식으로 되어 있어야 chkconfig 에서 --add 시 스크립트가 등록된다.
chkconfig 에서--add 로 등록된 서비스는 service 명령으로 단위별 실행시 가능한다.

#!/bin/bash
## BEGIN INIT INFO
# Provides: sandbox
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 3 4 6
# Required-Start:
#
## END INIT INFO
# sandbox:        Set up / mountpoint to be shared, /var/tmp, /tmp, /home/sandbox unshared
#
# chkconfig: 345 1 99
#
# description: sandbox, xguest and other apps that want to use pam_namespace \
#              require this script be run at boot.  This service script does \
#              not actually run any service but sets up: \
#              / to be shared by any app that starts a separate namespace
#              If you do not use sandbox, xguest or pam_namespace you can turn \
#              this service off.\
#

# Source function library.

LOCKFILE=/var/lock/subsys/sandbox

base=${0##*/}

start() {
        echo -n "Starting sandbox"

        [ -f "$LOCKFILE" ] && return 1

        touch $LOCKFILE
        mount --make-rshared / || return $?
        return 0
}

stop() {
        echo -n "Stopping sandbox"

        [ -f "$LOCKFILE" ] || return 1
}

status() {
        if [ -f "$LOCKFILE" ]; then
            echo "$base is running"
        else
            echo "$base is stopped"
        fi
        exit 0
}

case "$1" in
    restart)
        start && success || failure
        ;;

    start)
        start && success || failure
        echo
        ;;

    stop)
        stop && success || failure
        echo
        ;;

    status)
        status
        ;;

    *)
        echo $"Usage: $0 {start|stop|status|restart}"
        exit 3
        ;;
esac




 참고용 데몬 실행 스크립트이다.
 #!/bin/bash

#

# svnserve        Startup script for the Subversion svnserve daemon

#

# chkconfig: - 85 15

# description: The svnserve daemon allows access to Subversion repositories \

#              using the svn network protocol.

# processname: svnserve

# config: /etc/sysconfig/svnserve

# pidfile: /var/run/svnserve.pid

#

### BEGIN INIT INFO

# Provides: svnserve

# Required-Start: $local_fs $remote_fs $network

# Required-Stop: $local_fs $remote_fs $network

# Short-Description: start and stop the svnserve daemon

# Description: The svnserve daemon allows access to Subversion

#   repositories using the svn network protocol.

### END INIT INFO


# Source function library.

. /etc/rc.d/init.d/functions


if [ -f /etc/sysconfig/svnserve ]; then

        . /etc/sysconfig/svnserve

fi


exec=/usr/bin/svnserve

prog=svnserve

pidfile=${PIDFILE-/var/run/svnserve.pid}

lockfile=${LOCKFILE-/var/lock/subsys/svnserve}

args="--daemon --pid-file=${pidfile} $OPTIONS"

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog


lockfile=/var/lock/subsys/$prog


start() {

    [ -x $exec ] || exit 5

    [ -f $config ] || exit 6

    echo -n $"Starting $prog: "

    daemon --pidfile=${pidfile} $exec $args

    retval=$?

    echo

    [ $retval -eq 0 ] && touch $lockfile

    return $retval

}


stop() {

    echo -n $"Stopping $prog: "

    killproc -p ${pidfile} $prog

    retval=$?

    echo

    [ $retval -eq 0 ] && rm -f $lockfile

    return $retval

}


restart() {

    stop

    start

}


reload() {

    restart

}


force_reload() {

    restart

}


rh_status() {

    # run checks to determine if the service is running or use generic status

    status -p ${pidfile} $prog

}


rh_status_q() {

    rh_status >/dev/null 2>&1

}


case "$1" in

    start)

        rh_status_q && exit 0

        $1

        ;;

    stop)

        rh_status_q || exit 0

        $1

        ;;

    restart)

        $1

        ;;

    reload)

        rh_status_q || exit 7

        $1

        ;;

    force-reload)

        force_reload

        ;;

    status)

        rh_status

        ;;

    condrestart|try-restart)

        rh_status_q || exit 0

        restart

        ;;

    *)

        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"

        exit 2

esac


systemctl (페도라 16 서비스 관리 프로세스) 

서비스 파일들은 /lib/systemd/system 에 있다.



 Fedora 16에서는 서비스(Service) 관리를 systemctl이라는 명령어로 한다. (이전 버전 명령어들도 아직은 사용 가능하지만 systemctl 사용을 권장하고 있다.)

서비스 상태 확인 하기

서비스 상태 확인은 다음과 같이 한다.

systemctl status service_name.service

예를 들어 httpd의 상태를 확인하려면 다음과 같이 명령한다.

systemctl status httpd.service

서비스 시작, 중지, 재시작 하기

서비스를 시작하는 기본 명령 방식은 다음과 같다.

systemctl start service_name.service

중지할 때에는 start 대신 stop을, 재시작할 때에는 restart를 쓰면 된다. 예를 들어 httpd를 시작하려면 다음과 같이 명령한다.

systemctl start httpd.service

중지와 재시작은 다음과 같이 명령하면 된다.

systemctl start httpd.service

systemctl start httpd.service

부팅 시 자동 실행 하기

시스템 부팅 시 서비스가 자동 실행되게 하는 명령은 다음과 같다.

systemctl enable service_name.service

예를 들어 httpd를 부팅 시 자동 실행되게 하려면 다음과 같이 명령한다.

systemctl enable httpd.service

자동 실행 되지 않게 하려면 enable 대신 disable을 쓰면 된다.

실행 중인 서비스 보기

실행 중인 모든 서비스 목록을 보려면 다음과 같이 명령한다.

systemctl list-units –type=service




반응형