next up previous contents index
Next: Examples of of Up: Managing HEPDB servers Previous: VMS systems running

Setting up a new server on hepdb

The hepdb system is a dedicated IBM RS6000 that only runs HEPDB servers and associated jobs. The database files are maintained in the /hepdb file system. This is nfs exported and should be mounted on other Unix systems, such as CSF, as follows:

Mounting the /hepdb file system

mount hepdb:/hepdb /hepdb

Before creating a new server, the account must be registered for service AFS using USERREG. The account should be the letters cd followed by the name of the experiment, e.g. cdatlas, cdnomad, cdna49.

Once the account has been centrally registered for AFS, one should create an account on the HEPDB machine, using the UID and GID allocated by USERREG and visible through XWHO.

Finally, the following script is run to create the appropriate directories and dummy configuration files.

New servers can be setup using the following script, which creates the necessary directory structure and configuration files.

Creating the files and directories for a new server

#
# Setup the directory and file structure for a new
# server
#
iam=`whoami`
#
# Are we root?
#
if [ "$iam" != "root" ]
then
   echo $0: This script must be run from root
   exit
fi
#
# Did we get any arguments?
#
if [ $# != 1 ]
then
   echo $0: usage $0 group
   exit
fi
#
# Does this directory exist?
#
if [ -d /hepdb/$1 ]
then
   echo $0: Directory /hepdb/$1 already exists
   exit
fi
#
# No, so make it
#
mkdir /hepdb/$1
#
# and the subdirectories...
#
mkdir /hepdb/$1/bad
mkdir /hepdb/$1/log
mkdir /hepdb/$1/queue
chmod o+w /hepdb/$1/queue
mkdir /hepdb/$1/todo
mkdir /hepdb/$1/save
ls -F /hepdb/$1
#
# now create the names file
#
echo :nick.config > /hepdb/$1/hepdb.names
echo :list.aa     >> /hepdb/$1/hepdb.names
echo :log./hepdb/$1/log >> /hepdb/$1/hepdb.names
echo :queue./hepdb/$1/queue >> /hepdb/$1/hepdb.names
echo :todo./hepdb/$1/todo >> /hepdb/$1/hepdb.names
echo :save./hepdb/$1/save >> /hepdb/$1/hepdb.names
echo :bad./hepdb/$1/bad >> /hepdb/$1/hepdb.names
echo :loglevel.3 >> /hepdb/$1/hepdb.names
echo :wakeup.60 >> /hepdb/$1/hepdb.names
echo :nick.aa >> /hepdb/$1/hepdb.names
echo :file./hepdb/$1/aa.dbs >> /hepdb/$1/hepdb.names
echo :desc.Description of the database >> /hepdb/$1/hepdb.names
echo :servers. >> /hepdb/$1/hepdb.names
cat /hepdb/$1/hepdb.names
#
# Link the server script
#
ln -s /cern/new/bin/cdserv.sh /hepdb/$1/cdserv
#
# and the server module
#
ln -s /cern/new/bin/cdserv /hepdb/$1/cdsrv

The servers are started at boot time by adding the file /etc/inittab as follows:

Extract from /etc/inittab

rcnfs:2:wait:/etc/rc.nfs > /dev/console 2>&1 # Start NFS Daemons
hepdb:2:wait:/etc/rc.hepdb > /dev/console 2>&1 # Start HEPDB
cons:0123456789:respawn:/etc/getty /dev/console

This invokes the following script:

rc.hepdb

#!/bin/sh
#
#               Start HEPDB servers
#
#
if [ -x /cern/pro/bin/cdstart ]
then
        echo Start HEPDB servers ...
        su - hepdb /cern/pro/bin/cdstart 2>&1
fi

One may execute cdstart at any time, as it will only restart servers that are not already running.

cdstart script

#!/bin/ksh
start=" "
stop=" "
run=" "
nolog=" "
noscr=" "
b="."
#
#   Ensure that variables are defined...
#

for i in /hepdb/cd*
   do

echo
typeset -u cdgrp
cdpath=$i
cdgrp=`basename $i`
echo Setting $cdgrp to $cdpath ...
eval $cdgrp=$cdpath;export $cdgrp
#
# and start the servers
#
if [ -x ${i}/cdserv ]
   then
#
# does a log file exist?
#
   if [ -f /hepdb/${cdgrp}.log ]
      then
      echo '>>> log file exists - looking for existing process'
      log=${log}${b}${cdgrp}
      pid=`cat /hepdb/${cdgrp}.log | awk '{printf "%s\\ n",$13}'`
      if (test $pid)
         then
         echo Looking for server process for $cdgrp
         if(ps -ae  | grep -s $pid )
            then
            echo CDSRV running PID = $pid
            run=${run}${b}${cdgrp}
            else
            echo No existing server found for $cdgrp - starting server
            if [ -f ${i}/todo/signal.stop ]
               then echo but signal.stop file found!
               else echo Starting server for $cdgrp
               nohup ${i}/cdserv ${cdgrp} > $i/cdserv.log &
               start=${start}${b}${cdgrp}
            fi
         fi

         else
         echo No existing server found for $cdgrp - starting server
         if [ -f ${i}/todo/signal.stop ]
            then echo but signal.stop file found!
            stop=${stop}${b}${cdgrp}
            else echo Starting server for $cdgrp
            nohup ${i}/cdserv ${cdgrp} > $i/cdserv.log &
            start=${start}${b}${cdgrp}
         fi
      fi
      else
      echo No server log found in $i
      if [ -f ${i}/todo/signal.stop ]
         then echo but signal.stop file found!
         stop=${stop}${b}${cdgrp}
         else echo Starting server for $cdgrp
         nohup ${i}/cdserv ${cdgrp} > $i/cdserv.log &
         start=${start}${b}${cdgrp}
      fi
   fi
   else
   echo No cdserv script found in $i - cannot start server
   scr=${scr}${b}${cdgrp}
fi

done

echo
echo Log files found for $log | tr '.' ' '
echo Started servers for $start | tr '.' ' '
echo Servers already running for $run | tr '.' ' '
echo Servers stopped $stop | tr '.' ' '
echo No scripts found for $scr | tr '.' ' '

The servers can be checked by running the following script:

Looking for running servers

echo 'HEPDB server                                        Elapsed     CPU time   %CPU'
echo '==============================================================================='
ps -aef -F "args,etime,time,pcpu" | grep "/cdsrv" | sort +2 -r

Output from the above script

HEPDB server                                        Elapsed     CPU time   %CPU
===============================================================================
/hepdb/cdnomad/cdsrv                              7-02:19:29    00:04:44   0.0
/hepdb/cdchorus/cdsrv                             7-02:19:29    00:04:43   0.0
/hepdb/cdcplear/cdsrv                             7-02:19:29    00:04:41   0.0


Janne Saarela
Tue May 16 10:31:09 METDST 1995