본문 바로가기
서버/리눅스

CentOS 5, supervisor 설치 및 설정하기

by 사악신 2014. 5. 5.


node.js 로 개발할 때 편리한 모듈이 node-supervisor 입니다. 소스가 수정되거나 오류가 발생할 때 재시작하는 기능을 제공하는 놈이죠. 처음엔 별 생각없이 사용하고 있었는데... 프로세스를 관리하는 supervisor 란 놈이 따로 있다는 것을 알게되었습니다.



아무래도 개발이 끝나고 홈페이지를 배포 및 운영할 때 node-supervisor 만으로는 부족함을 느끼고 있던 차, supervisor 의 기능 등을 살펴보니 꽤 쓸만해 보였습니다. 하여 supervisor 를 직접 설치하여 사용해보기로 마음먹었습니다.(이하 모든 과정은 루트 계정에서 실행한 것입니다.)


우선, CentOS 5.x 버전의 서버를 사용하고 있는 관계로 일단 yum 으로 해당 패키지가 있는지 찾아보았습니다. 존재하더군요. 바로 yum 으로 설치해보았습니다.


yum install supervisor



하지만... 제가 바랬던 supervisord, supervisorctl 등은 함께 설치되지 않더군요. 별 수 없이 직접 설치하는 방식을 해보았습니다. 파이썬의 easy_install 을 사용하는 방식인데... 이 녀석은 python-setuptools 패키지에 포함되어 있습니다.


yum install python-setuptools



python-setuptools 를 설치한 후에 easy_install 로 supervisor 를 설치해보았습니다.


easy_install supervisor


헌데, 설치 도중 에러 메시지가 나타나며 중단되더군요. 내용인즉, python 2.5 이상이 필요하다는 것인데... CentOS 5.x 의 경우 기본 python 이 2.4 입니다.(python26 으로 2.6 버전을 별도 설치할 수 있습니다.) setuptools 를 yum 으로 설치할 수 없는 상황이라 별도 다운로드한 후 설치하였습니다.


wget https://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg --no-check-certificate

sh setuptools-0.6c11-py2.6.egg


그리고 예전에 설치한 python 2.6 을 사용하여 easy_install 을 실행하였습니다.


python26 -m easy_install supervisor



이번엔 제대로 설치되었습니다.^^ 이하는 설정 관련 내용입니다.




supervisord 의 기본 설정 파일을 생성합니다.


echo_supervisord_conf > /etc/supervisord.conf


로그 파일 등을 관리하기 위하여 디렉토리를 생성합니다.


mkdir /var/log/supervisor


supervisord.conf 의 내용을 수정 및 추가합니다. 아래는 node.js 로 실행할 두 개의 홈페이지입니다. 이때 node 의 경로를 절대경로로 지정하여야 동작하더군요. PATH 설정 등을 하면 될 거 같긴한데 귀찮아서... ^^(forever 로 실행하는 것도 괜찮을 거 같습니다.)


vi /etc/supervisord.conf

[supervisord]

logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)


[program:ghost]

command = /usr/local/bin/node /home/artg/html/ghost/index.js

directory = /home/artg/html/ghost

user = artg

autostart = true

autorestart = true

stdout_logfile = /var/log/supervisor/ghost.log

stderr_logfile = /var/log/supervisor/ghost_err.log

environment = NODE_ENV="production"



[program:artg]

command = /usr/local/bin/node /home/artg/html/artg1/app.js

directory = /home/artg/html/artg1

user = artg

autostart = true

autorestart = true

stdout_logfile = /var/log/supervisor/artg.log

stderr_logfile = /var/log/supervisor/artg_err.log

environment = NODE_ENV="production"


설정 파일을 생성한 후, 재부팅시 자동실행 될 수 있도록 서비스에 추가합니다.


vi /etc/init.d/supervisord

#!/bin/bash

#

#       /etc/rc.d/init.d/supervisord

# supervisord   This shell script takes care of starting and stopping

#               supervisord.  Tested on Fedora 11.

#

# Author: Brian Bouterse bmbouter@gmail.com

#

# chkconfig: 345 80 80

# description: supervisord is a client/server process control system. \

# processname: supervisord

# pidfile: /var/run/supervisord.pid


# Source function library.

. /etc/init.d/functions


DAEMON=/usr/bin/supervisord

PIDFILE=/var/run/supervisord.pid


# Exit if the package is not installed

[ -x "$DAEMON" ] || exit 0


start() {

        echo -n "Starting supervisord: "

        if [ -f $PIDFILE ]; then

                PID=`cat $PIDFILE`

                echo supervisord already running: $PID

                exit 2;

        else

                daemon  $DAEMON --pidfile=$PIDFILE

                RETVAL=$?

                echo

                [ $RETVAL -eq 0 ] && touch /var/lock/subsys/supervisord

                return $RETVAL

        fi


}


stop() {

        echo -n "Shutting down supervisord: "

        echo

        killproc -p $PIDFILE supervisord

        echo

        rm -f /var/lock/subsys/supervisord

        return 0

}


case "$1" in

    start)

        start

        ;;

    stop)

        stop

        ;;

    status)

        status supervisord

        ;;

    restart)

        stop

        start

        ;;

    *)

        echo "Usage:  {start|stop|status|restart}"

        exit 1

        ;;

esac

exit $?


생성한 스크립트를 등록합니다.


chmod +x /etc/init.d/supervisord

chkconfig --level 345 supervisord on


만약, 삭제할 경우라면 아래의 명령어를 사용하면 됩니다.


chkconfig supervisord off


서비스 중인 홈페이지를 재시작/시작/중지할 경우 아래와 같이 프로그램명을 지정하여 supervisorctl 을 호출하면 됩니다.


supervisorctl restart artg

supervisorctl start artg

supervisorctl stop artg


만약, 개발 중이라면... node-supervisor 를 할성화하여 사용하다~ 최종 배포시 supervisorctl 을 사용하여 start 하면 되겠습니다.


supervisorctl stop artg

supervisor index.js



node 의 경우, development 모드와 production 모드 두 가지가 있습니다. 그리고 각 모드에 따라 다른 화면이 나올 수 있습니다. 다음은 모드를 지정하여 실행할 경우입니다.


NODE_ENV=production supervisor index.js





CentOS 7 에서는 vi /usr/lib/systemd/system/supervisord.service 를 생성합니다. 이때 supervisord.conf 파일의 위치를 확인하여 알맞게 적용합니다.


[Unit]

Description=supervisord - Supervisor process control system for UNIX

Documentation=http://supervisord.org

After=network.target


[Service]

Type=forking

ExecStart=/bin/supervisord -c /etc/supervisord.conf

ExecReload=/bin/supervisorctl reload

ExecStop=/bin/supervisorctl shutdown

User=root


[Install]

WantedBy=multi-user.target





반응형

'서버 > 리눅스' 카테고리의 다른 글

nginx + php-fpm 설치하기 - CentOS 6.x  (0) 2014.08.13
CentOS mongodb 2.6.1 업데이트하기  (0) 2014.05.08
CentOS, node.js - Ghost 설치하기  (0) 2014.05.01
CentOS GitEye 설치하기  (0) 2014.03.20
CentOS 패키지 강제 설치하기  (0) 2014.03.19

댓글