#!/bin/bash # # plc Manages all PLC services on this machine # # chkconfig: 2345 99 5 # # description: Manages all PLC services on this machine # # $Id: host.init,v 1.5 2006/04/18 15:39:34 thierry Exp $ # PATH=/sbin:/bin:/usr/bin:/usr/sbin # Source function library. . /etc/init.d/functions # Source configuration if [ -f /etc/sysconfig/plc -a -z "${PLC_ROOT}${PLC_DATA}" ] ; then . /etc/sysconfig/plc fi # Total number of errors ERRORS=0 # Count the exit status of the last command check () { ERRORS=$(($ERRORS+$?)) } mounted () { if cut -d' ' -f2 /proc/mounts | grep -q "$1" ; then return 0 else return 1 fi } mount_plc () { echo -n $"Mounting PLC: " if ! mounted $PLC_ROOT ; then if ! e2fsck -a $PLC_ROOT.img | logger -t "PLC" ; then e2fsck $PLC_ROOT.img fi mount -o loop $PLC_ROOT.img $PLC_ROOT check fi if ! mounted $PLC_ROOT/data ; then mount -t none -o bind,rw $PLC_DATA $PLC_ROOT/data check fi if ! mounted $PLC_ROOT/proc ; then mount -t proc none $PLC_ROOT/proc check fi [ $ERRORS -eq 0 ] && success $"PLC unmount" || failure $"PLC unmount" echo } start () { mount_plc chroot $PLC_ROOT /sbin/service plc $PLC_OPTIONS start $* check } umount_plc () { echo -n $"Unmounting PLC: " for dir in $PLC_ROOT/proc $PLC_ROOT/data $PLC_ROOT ; do if mounted $dir ; then umount $dir check fi done [ $ERRORS -eq 0 ] && success $"PLC unmount" || failure $"PLC unmount" echo } stop () { if mounted $PLC_ROOT ; then chroot $PLC_ROOT /sbin/service plc $PLC_OPTIONS stop $* check fi umount_plc } mount_status () { lines=$(mount | grep $PLC_ROOT) if [ -z "$lines" ] ; then echo "==== $PLC_ROOT is *not* mounted" else echo "==== The following mount points remain active" echo "$lines" fi } # Get command shift $(($OPTIND - 1)) command=$1 # Get step(s) shift 1 case "$command" in start|stop) $command $* ;; restart) stop $* start $* ;; mount|umount) ${command}_plc $* ;; mountstatus) mount_status $* ;; *) echo "Usage: $0 {start|stop|restart|mount|umount|mountstatus}" RETVAL=1 ;; esac exit $ERRORS