daemontoolsでfastcgiプロセスを管理しようと思ってとりあえず書いてみた。
#!/bin/sh
#
# Copyright (c) 2007 Daisuke Maki <daisuke@endeworks.jp>
# All rights reserved.
#
# fastcgi.sh
# Runs catalyst based application's fastcgi script via daemontools'
# softlimit script. You should call this script from a specific 'run'
# script like so
#
# #!/bin/sh
# /path/to/fastcgi.sh -s myapp.mydomain.com
#
args=`getopt s:d:m:n:g: $*`
if [ $? -ne 0 ]; then
echo <<EOM
Usage: fastcgi-run.sh [options]
-s: service name.
-d: data directory
-m: max memory size as passed to softlimit(3)
-n: number of processes to spawn
-g: group name to run script as
EOM
exit 2
fi
set -- $args
for i
do
case "$i"
in
--) shift; break;;
-s)
SERVICE="$2"; shift; shift;;
-d)
DATADIR="$2"; shift; shift;;
-m)
MAXMEMORY="$2"; shift; shift;;
-n)
NUMPROCS="$2"; shift; shift;;
-g)
GROUP="$2"; shift; shift;;
esac
done
if [ -z $SERVICE ]; then
echo "No service defined."
exit 1;
fi
if [ -z $DATADIR ]; then
DATADIR="/var/tmp/$SERVICE"
fi
if [ -z $MAXMEMORY ]; then
MAXMEMORY=150000000
fi
if [ -z $NUMPROCS ]; then
NUMPROCS=10
fi
if [ -z $GROUP ]; then
GROUP=www
fi
SOCKET="$DATADIR/fastcgi.socket"
if [ ! -d $DATADIR ]; then
echo "$DATADIR does not exist. Creating..."
mkdir $DATADIR
if [ $? -ne 0 ]; then
echo "Failed to create $DATADIR"
exit 1;
fi
chmod a+rwx $DATADIR
fi
cd /www/$SERVICE
if [ -z $SCRIPT ]; then
SCRIPT=`find script -name '*_fastcgi.pl'`
fi
if [ -z $SCRIPT ]; then
echo "No suitable script found"
exit 1;
fi
exec 2>&1 \
setuidgid $GROUP \
softlimit -m $MAXMEMORY \
$SCRIPT -e -l $SOCKET -n $NUMPROCS
コメント