2

シンプルな構成ファイルと標準インターフェイスを介して、異なるポートでリッスンしている複数の Twiggy インスタンスを管理する方法を探しています。

たとえば、次のような構成が必要です

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

そして、 /etc/init.d のスクリプトは次のように使用されます

sudo service twiggy start
# start all services
sudo service twiggy restart dog
# cow remains intact
# ...

私の同僚の何人かはrunitを提案しており、有望そうに見えますが、私はまだ十分に慣れていません。

独自のスクリプトを書き始める前に、あえて SO に尋ねます: スクリプトは既に存在しますか?

4

2 に答える 2

1

デーモンを管理し、initスクリプトを自動的に作成する方法については、Daemon::Controlを参照してください。

于 2012-09-17T13:01:17.657 に答える
1

Twiggy::Prefork の Server::Starter init スクリプトを書きました。ただし、1 つの psgi アプリで動作します。多分それはあなたに役立つかもしれません。

Twiggy 用に変更されたスクリプトは次のとおりです。

#!/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
于 2014-09-05T08:48:26.167 に答える