X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=host.init;h=f207e008a525ab98501024070e0b4c4dafd31e21;hb=de3e713546999dd115ac713c27c205196f40b649;hp=0c101e210c04972619832e6614483c5eaf0afea0;hpb=2b5a03e21b801468b9e509d49626b97e7798922e;p=myplc.git diff --git a/host.init b/host.init index 0c101e2..f207e00 100755 --- a/host.init +++ b/host.init @@ -6,101 +6,157 @@ # # description: Manages all PLC services on this machine # -# $Id: plc.init,v 1.6 2005/04/24 19:48:11 mlhuang Exp $ +# $Id: host.init,v 1.8 2006/07/06 17:43:52 mlhuang Exp $ # PATH=/sbin:/bin:/usr/bin:/usr/sbin # Source function library. -. /etc/init.d/functions +if [ -f /etc/init.d/functions ] ; then + . /etc/init.d/functions +fi + +# If success() or failure() are not defined +if ! type -type success >/dev/null || ! type -type failure >/dev/null ; then + success() { + echo -ne "[ OK ]\r" + return 0 + } + failure() { + echo -ne "[FAILED]\r" + return 1 + } +fi # Source configuration -if [ -f /etc/sysconfig/plc ] ; then - . /etc/sysconfig/plc +SERVICE=$(basename $0) +if [ ! -f /etc/sysconfig/$SERVICE ] ; then + SERVICE=plc +fi +if [ -f /etc/sysconfig/$SERVICE -a -z "${PLC_ROOT}${PLC_DATA}" ] ; then + . /etc/sysconfig/$SERVICE fi -RETVAL=0 - -# Get options -while getopts "vh" opt ; do - case $opt in - v) - verbose=1 - set -x - ;; - h|*) - usage - ;; - esac -done +# Total number of errors +ERRORS=0 -start () +# 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 ! grep -q $PLC_ROOT.img /proc/mounts ; then + 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 - RETVAL=$(($RETVAL+$?)) + check fi - if ! grep -q $PLC_DATA /proc/mounts ; then + if ! mounted $PLC_ROOT/data ; then mount -t none -o bind,rw $PLC_DATA $PLC_ROOT/data - RETVAL=$(($RETVAL+$?)) + check fi - if ! grep -q $PLC_ROOT/proc /proc/mounts ; then + if ! mounted $PLC_ROOT/proc ; then mount -t proc none $PLC_ROOT/proc - RETVAL=$(($RETVAL+$?)) + check fi - if [ $RETVAL -eq 0 ]; then - success $"PLC mount" - else - failure $"PLC mount" - fi + [ $ERRORS -eq 0 ] && success $"PLC unmount" || failure $"PLC unmount" echo - chroot $PLC_ROOT /sbin/service plc $PLC_OPTIONS start - RETVAL=$? } -stop () +start () { - chroot $PLC_ROOT /sbin/service plc $PLC_OPTIONS stop + # Starting everything + if [ -z "$1" ] ; then + mount_plc + fi + + chroot $PLC_ROOT /sbin/service plc $PLC_OPTIONS start $* + check +} +umount_plc () +{ echo -n $"Unmounting PLC: " - umount $PLC_ROOT/proc - RETVAL=$(($RETVAL+$?)) - umount $PLC_ROOT/data - RETVAL=$(($RETVAL+$?)) - umount $PLC_ROOT - RETVAL=$(($RETVAL+$?)) + for dir in $PLC_ROOT/proc $PLC_ROOT/data $PLC_ROOT ; do + if mounted $dir ; then + umount $dir + check + fi + done - if [ $RETVAL -eq 0 ]; then - success $"PLC unmount" - else - failure $"PLC unmount" - fi + [ $ERRORS -eq 0 ] && success $"PLC unmount" || failure $"PLC unmount" echo } -restart () +stop () { - stop - start + if mounted $PLC_ROOT ; then + chroot $PLC_ROOT /sbin/service plc $PLC_OPTIONS stop $* + check + fi + + # Stopped everything + if [ -z "$1" ] ; then + umount_plc + fi } -case "$1" in - start|stop|restart) - $1 +mountstatus_plc () +{ + for dir in $PLC_ROOT/proc $PLC_ROOT/data $PLC_ROOT ; do + if mounted $dir ; then + echo $dir + fi + done +} + +# Get command +shift $(($OPTIND - 1)) +command=$1 + +# Get step(s) +shift 1 + +case "$command" in + start|stop) + $command $* ;; + restart) + stop $* + start $* + ;; + + reload) + chroot $PLC_ROOT /sbin/service plc $PLC_OPTIONS reload $* + ;; + + mount|umount|mountstatus) + ${command}_plc $* + ;; + *) - echo "Usage: $0 {start|stop|restart}" + echo "Usage: $0 {start|stop|restart|reload|mount|umount|mountstatus}" RETVAL=1 ;; esac -exit $RETVAL +exit $ERRORS