#!/bin/bash # # Init file for the DataDelivery service # # chkconfig: - 87 13 # description: ARC DataDelivery service # processname: arched ### BEGIN INIT INFO # Provides: arc-datadelivery-service # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs $remote_fs # Default-Stop: 0 1 2 3 4 5 6 # Short-Description: ARC DataDelivery service # Description: ARC DataDelivery service ### END INIT INFO # source function library if [ -f /etc/init.d/functions ]; then . /etc/init.d/functions log_success_msg() { echo -n "$@" success "$@" echo } log_warning_msg() { echo -n "$@" warning "$@" echo } log_failure_msg() { echo -n "$@" failure "$@" echo } elif [ -f /lib/lsb/init-functions ]; then . /lib/lsb/init-functions else echo "Error: Cannot source neither init.d nor lsb functions" exit 1 fi add_library_path() { location="$1" if [ ! "x$location" = "x" ] ; then if [ ! "$location" = "/usr" ] ; then libdir="$location/lib" libdir64="$location/lib64" if [ -d "$libdir64" ] ; then if [ "x$LD_LIBRARY_PATH" = "x" ]; then LD_LIBRARY_PATH="$libdir64" else LD_LIBRARY_PATH="$libdir64:$LD_LIBRARY_PATH" fi fi if [ -d "$libdir" ] ; then if [ "x$LD_LIBRARY_PATH" = "x" ]; then LD_LIBRARY_PATH="$libdir" else LD_LIBRARY_PATH="$libdir:$LD_LIBRARY_PATH" fi fi fi fi } prog=arched RUN=yes # sysconfig files if [ -r /etc/sysconfig/nordugrid ]; then . /etc/sysconfig/nordugrid elif [ -r /etc/default/nordugrid ]; then . /etc/default/nordugrid fi if [ -r /etc/sysconfig/arc-datadelivery-service ]; then . /etc/sysconfig/arc-datadelivery-service elif [ -r /etc/default/arc-datadelivery-service ]; then . /etc/default/arc-datadelivery-service fi # GLOBUS_LOCATION GLOBUS_LOCATION=${GLOBUS_LOCATION:-/usr} if [ ! -d "$GLOBUS_LOCATION" ]; then log_failure_msg "GLOBUS_LOCATION ($GLOBUS_LOCATION) not found" exit 1 fi export GLOBUS_LOCATION # ARC_LOCATION ARC_LOCATION=${ARC_LOCATION:-/usr} if [ ! -d "$ARC_LOCATION" ]; then log_failure_msg "ARC_LOCATION ($ARC_LOCATION) not found" exit 1 fi export ARC_LOCATION # Needed to get pid file readconfigvar() { fname=$1 if [ ! -r "$fname" ]; then return fi bname="[$2]" vname=$3 value= cat "$fname" | grep -e '^\[' -e "^${vname}=" | { while true; do read line if [ ! $? = 0 ] ; then return fi if [ "$line" = "$bname" ] ; then while true ; do read line if [ ! $? = 0 ] ; then return fi lstart=`echo "$line" | head -c 1` if [ "$lstart" = '[' ] ; then return fi vlname=`echo "$line" | sed 's/=.*//;t;s/.*//'` if [ "$vlname" = "$vname" ] ; then val=`echo "$line" | sed 's/[^=]*=//'` eval "echo $val" return fi done fi done } } # ARC_CONFIG if [ "x$ARC_CONFIG" = "x" ]; then if [ -r $ARC_LOCATION/etc/arc.conf ]; then ARC_CONFIG=$ARC_LOCATION/etc/arc.conf elif [ -r /etc/arc.conf ]; then ARC_CONFIG=/etc/arc.conf fi fi PID_FILE=`readconfigvar "$ARC_CONFIG" common pidfile` if [ `id -u` = 0 ] ; then # Debian does not have /var/lock/subsys if [ -d /var/lock/subsys ]; then LOCKFILE=/var/lock/subsys/$prog-datadelivery-service else LOCKFILE=/var/lock/$prog-datadelivery-service fi if [ "x$PID_FILE" = "x" ]; then PID_FILE=/var/run/$prog.pid fi else LOCKFILE=$HOME/$prog-datadelivery-service.lock if [ "x$PID_FILE" = "x" ]; then PID_FILE=$HOME/$prog.pid fi fi prepare() { CMD="$ARC_LOCATION/sbin/$prog" if [ ! -x "$CMD" ]; then log_failure_msg "Missing executable" exit 1 fi if [ ! -r "$ARC_CONFIG" ]; then log_warning_msg "ARC configuration not found (usually /etc/arc.conf)" exit 0 fi # check that at least service is defined grep -e '^\[datadelivery-service\]' $ARC_CONFIG 1>/dev/null 2>&1 if [ $? -ne 0 ] ; then log_failure_msg "Data delivery service not defined in configuration" exit 1 fi # Assuming ini style config CMD="$CMD -i '$ARC_CONFIG'" add_library_path "$GLOBUS_LOCATION" if [ "x$LD_LIBRARY_PATH" = "x" ]; then LD_LIBRARY_PATH=$ARC_LOCATION/lib else LD_LIBRARY_PATH=$ARC_LOCATION/lib:$LD_LIBRARY_PATH fi export LD_LIBRARY_PATH } start() { if [ "$RUN" != "yes" ] ; then echo "arc-datadelivery-service disabled in configuration" return 0 fi echo -n "Starting $prog: " # Check if we are already running if [ -f $PID_FILE ]; then read pid < $PID_FILE if [ "x$pid" != "x" ]; then ps -p "$pid" -o comm 2>/dev/null | grep "^$prog$" 1>/dev/null 2>/dev/null if [ $? -eq 0 ] ; then log_success_msg "already running (pid $pid)" return 0 fi fi rm -f "$PID_FILE" "$LOCKFILE" fi prepare eval "$CMD" RETVAL=$? rm -f "$SERVICE_CONFIG" if [ $RETVAL -eq 0 ]; then touch $LOCKFILE log_success_msg else log_failure_msg fi return $RETVAL } stop() { echo -n "Stopping $prog: " if [ -f "$PID_FILE" ]; then read pid < "$PID_FILE" if [ ! -z "$pid" ] ; then kill "$pid" RETVAL=$? if [ $RETVAL -eq 0 ]; then log_success_msg else log_failure_msg fi timeout=10; # enough time to kill any active processes while ( ps -p "$pid" -o comm 2>/dev/null | grep "^$prog$" 1>/dev/null 2>/dev/null ) && [ $timeout -ge 1 ] ; do sleep 1 timeout=$(($timeout - 1)) done [ $timeout -lt 1 ] && kill -9 "$pid" 1>/dev/null 2>&1 rm -f "$PID_FILE" "$LOCKFILE" else RETVAL=1 log_failure_msg "$prog shutdown - pidfile is empty" fi else RETVAL=0 log_success_msg "$prog shutdown - already stopped" fi return $RETVAL } status() { if [ -f "$PID_FILE" ]; then read pid < "$PID_FILE" if [ "$pid" != "" ]; then if ps -p "$pid" > /dev/null; then echo "$1 (pid $pid) is running..." return 0 fi echo "$1 stopped but pid file exists" return 1 fi fi if [ -f $LOCKFILE ]; then echo "$1 stopped but lockfile exists" return 2 fi echo "$1 is stopped" return 3 } restart() { stop start } case "$1" in start) start ;; stop) stop ;; status) status $prog ;; restart | force-reload) restart ;; reload) ;; condrestart | try-restart) [ -f $LOCKFILE ] && restart || : ;; *) echo "Usage: $0 {start|stop|status|restart|force-reload|reload|condrestart|try-restart}" exit 1 ;; esac exit $?