2012-09-17 2 views
2

간단한 구성 파일과 표준 인터페이스를 통해 여러 포트에서 수신 대기중인 여러 Twiggy 인스턴스를 관리 할 수있는 방법을 찾고 있습니다.Twiggy 기반 PSGI 응용 프로그램 용 초기화 스크립트

예. 나는

내 동료 중 일부는 runit 제안
sudo service twiggy start 
# start all services 
sudo service twiggy restart dog 
# cow remains intact 
# ... 

처럼 사용의 /etc/init.d에

dog 5000 /www/psgi/dog.pl 
cow 5001 /www/psgi/holycow.pl 
# ... 

그리고 스크립트처럼 보이는 설정을 원하고, 그러나 약속 같은데 나는 아직 그것에 익숙하지 않다.

내 자신의 스크립트를 작성하기 전에 감히 묻습니다. 이미 존재합니까? 방법에 대한 Daemon::Control에서

+0

A [유사한 질문] 실측치 (http://stackoverflow.com/questions/5500943/best-init-script-for-running-an-application : 여기

는 잔가지 대한 수정 스크립트 -as-a-separate-user)하지만 몇 가지 추가 요구 사항이있는 것처럼 보입니다. – Dallaylaen

+1

어떤 초기화 플랫폼을 타겟팅하고 있습니까? 좋은 오래된 SysV가 있습니다. 새로운 시작 (우분투), systemd (Fedora), BSD 스타일, launchd (OS X) 등이 있습니다. – Charles

+0

@Charles 좋은 질문입니다. 우리는 현재 FreeBSD에 있지만 Linux 로의 마이그레이션을 고려하고 있습니다 (SysV) – Dallaylaen

답변

1

봐는 데몬을 관리하고 자동으로 내가 Server::Starter init script for Twiggy::Prefork 쓴 초기화 스크립트

+0

마침내 데몬 : 내 손에있어 : ​​컨트롤, 추천 주셔서 감사합니다. 내가 원하는대로 확장 할 수있을만큼 쉬울 것 같습니다 (또는 100500 개의 사용자 정의 스크립트를 작성할 수 있습니다). – Dallaylaen

1

를 작성. 하지만 하나의 psgi 앱으로 작동합니다. 아마 그것은 당신에게 유용 할 수 있습니다.

#!/bin/sh 

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 
DAEMON=/usr/local/bin/start_server 
NAME=start_server 
DESC=start_server 
RUNDIR=/var/run/start_server 

PIDFILE=$RUNDIR/start_server.pid 
STATUSFILE=$RUNDIR/start_server.status 

PSGI_APP='/path_to_psgi_app/app.pl' 

HTTP_SERVER="plackup --no-default-middleware -s Twiggy -a $PSGI_APP" 
LOGGER="2>&1 | logger -p daemon.notice -t $DESC" 
DAEMON_ARGS="--port=6000 -- $HTTP_SERVER $LOGGER" 

if [ ! -e $PSGI_APP ]; then 
    echo "'$PSGI_APP' does not exist" 
    exit 1 
fi 

case "$1" in 
    start) 
    echo -n "Starting $DESC: " 

    mkdir -p $RUNDIR 
    chown www-data:www-data $RUNDIR 
    chmod 755 $RUNDIR 

    if start-stop-daemon --start --name $NAME --pidfile $PIDFILE \ 
     --chuid www-data:www-data --exec /usr/bin/perl --startas \ 
     /bin/bash -- -c "$DAEMON --pid-file $PIDFILE --status-file $STATUSFILE $DAEMON_ARGS &" 
    then 
     echo "$NAME." 
    else 
     echo "failed" 
    fi 
    ;; 

    stop) 
    echo -n "Stopping $DESC: " 
    if start-stop-daemon --stop --retry forever/TERM/10 --quiet --oknodo \ 
     --name $NAME --pidfile $PIDFILE 
    then 
     echo "$NAME." 
    else 
     echo "failed" 
    fi 
    sleep 1 
    ;; 

    reload) 
    echo -n "Reloading $DESC: " 
    if $DAEMON --pid-file $PIDFILE --status-file $STATUSFILE --restart 
    then 
     echo "$NAME." 
    else 
     echo "failed" 
    fi 
    ;; 

    restart) 
    ${0} stop 
    ${0} start 
    ;; 

    status) 
    echo -n "$DESC is " 
    if start-stop-daemon --stop --quiet --signal 0 --name ${NAME} --pidfile ${PIDFILE} 
    then 
     echo "running" 
    else 
     echo "not running" 
     exit 1 
    fi 
    ;; 
esac 

exit 0 
+0

이것이 답변 일지 모르지만 항상 답변 본문에 링크 된 항목의 핵심 개념을 포함하십시오. 링크는 불행히도 시간이 지나면 죽습니다. – EWit

+0

@EWit, 정정 된 :) – scripter

관련 문제