91ad193104
--HG-- branch : develop
129 lines
3.6 KiB
Bash
129 lines
3.6 KiB
Bash
#!/bin/sh
|
|
|
|
CMD=$*
|
|
|
|
if [ "$CMD" = "" ]
|
|
then
|
|
|
|
echo
|
|
echo Screen sessions currently running:
|
|
screen -list
|
|
echo
|
|
echo "Commands:"
|
|
echo " 'start' to start the admin"
|
|
echo " 'stop' to stop the admin"
|
|
echo " 'join' to join the admin's screen session"
|
|
echo " 'share' to join the admin if session is shared mode"
|
|
echo
|
|
printf "Enter a command: "
|
|
read CMD
|
|
fi
|
|
|
|
if [ "$CMD" = "stop" ]
|
|
then
|
|
for s in $(screen -list | grep "\.admin.*" | awk '{ print $1 }'); do screen -drR $s -X quit; done
|
|
fi
|
|
|
|
if [ "$CMD" = "start" ]
|
|
then
|
|
# force the ulimit just in case (so that we can generate cores)
|
|
ulimit -c unlimited
|
|
|
|
# stop any admin sessions that were already up
|
|
for s in $(screen -list | grep "\.admin.*" | awk '{ print $1 }'); do screen -drR $s -X quit; done
|
|
|
|
# start the main admin session
|
|
screen -d -m -S admin -c /srv/core/bin/admin.screen.rc
|
|
|
|
# decide which hostname to use...
|
|
HOSTNAME=$(hostname)
|
|
if [ $(grep $HOSTNAME /srv/core/patchman/special_patchman_list | wc -w) = 0 ]
|
|
then
|
|
HOSTNAME=$(hostname -s)
|
|
fi
|
|
|
|
# if this machine has associated special admin functins then start the appropriate admin sessions
|
|
echo Looking for sessions for host: $HOSTNAME
|
|
for ROLE in $(grep $HOSTNAME /srv/core/patchman/special_patchman_list | awk '{ print $1 }')
|
|
do
|
|
ROLE_DIR=/srv/core/$ROLE
|
|
SRC_CFG_FILE=/srv/core/patchman/patchman_service.$ROLE.cfg
|
|
|
|
# make sure the cfg file exists for the patchman we're to launch
|
|
if [ -e $SRC_CFG_FILE ]
|
|
then
|
|
# preliminary setup prior to launching special admin patchman
|
|
CFG_FILE=$ROLE_DIR/patchman_service.cfg
|
|
SCREEN_NAME=admin_$ROLE
|
|
mkdir -p $ROLE_DIR
|
|
cp -v $SRC_CFG_FILE $CFG_FILE
|
|
|
|
# wait 2 seconds before launching the next admin to reduce system conflict
|
|
sleep 2
|
|
|
|
# start the next patchman in its own screen session
|
|
pushd $ROLE_DIR > /dev/null
|
|
echo STARTING $SCREEN_NAME \($ROLE\)
|
|
screen -d -m -S $SCREEN_NAME /bin/sh /srv/core/patchman/loop_special_patchman.sh /srv/core/patchman/ryzom_patchman_service -L. -C.
|
|
popd > /dev/null
|
|
|
|
else
|
|
# the patchman\'s cfg couln\'t be found so complain and ignore
|
|
echo FILE NOT FOUND: $SRC_CFG_FILE
|
|
fi
|
|
done
|
|
|
|
|
|
# try launching the screen sessions that correspond to the machine type that we have...
|
|
|
|
# get the domain list
|
|
cd /srv/core/patchman/
|
|
if [ $(grep $(hostname) auto_start_domain_list |wc -l) -gt 0 ]
|
|
then
|
|
DOMAIN_LIST=$(grep $(hostname) auto_start_domain_list | cut -d\ -f2-)
|
|
elif [ $(grep $(hostname -s) auto_start_domain_list |wc -l) -gt 0 ]
|
|
then
|
|
DOMAIN_LIST=$(grep $(hostname -s) auto_start_domain_list | cut -d\ -f2-)
|
|
elif [ $(grep $(hostname -d) auto_start_domain_list |wc -l) -gt 0 ]
|
|
then
|
|
DOMAIN_LIST=$(grep $(hostname -d) auto_start_domain_list | cut -d\ -f2-)
|
|
else
|
|
echo "There are no domains to be autostarted here"
|
|
DOMAIN_LIST=none
|
|
fi
|
|
|
|
# if we have a domain list for this machine then deal with it...
|
|
if [ "$DOMAIN_LIST" != none ]
|
|
then
|
|
# iterate over the domain list...
|
|
for f in $DOMAIN_LIST
|
|
do
|
|
# see if we're setup to run this domain
|
|
if [ -e /srv/core/${f}.screen.rc ] && [ -e /srv/core/bin/domain_${f} ]
|
|
then
|
|
# see whether the domain is alredy running
|
|
if [ $( screen -list | grep \\\.${f} | wc -w ) = 0 ]
|
|
then
|
|
# the domain isn't running yet so start it
|
|
echo '****' starting domain: $f '****'
|
|
/srv/core/bin/domain_$f batchstart
|
|
else
|
|
echo '****' Domain is already running: $f '****'
|
|
fi
|
|
else
|
|
echo skipping domain: $f
|
|
fi
|
|
done
|
|
fi
|
|
fi
|
|
|
|
if [ "$CMD" = "join" ]
|
|
then
|
|
screen -r -S admin
|
|
fi
|
|
|
|
if [ "$CMD" = "share" ]
|
|
then
|
|
screen -r -x -S admin
|
|
fi
|
|
|