The manage.sh fileΒΆ

explanation ...

Example shell script to manage the pv2web_ro process either as a startup or a background daemon.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/bin/bash
# init file for pv2web_ro
#
# chkconfig: - 98 98
# description: pv2web_ro WWW page update script for IOC: prj
#
# processname: pv2web_ro_iocprj


PROJECT_DIR=/tmp/pv
MANAGE=${PROJECT_DIR}/manage.sh
LOGFILE=${PROJECT_DIR}/log-manage.txt
PIDFILE=${PROJECT_DIR}/pid.txt
CONFIGFILE=${PROJECT_DIR}/config.xml

PYTHON_DIR=/home/oxygen/JEMIAN/Apps/anaconda/bin
SCRIPT=${PYTHON_DIR}/pv2web_ro

RETVAL=0


get_pid(){
    cd ${PROJECT_DIR}
    PID=`/bin/cat ${PIDFILE}`
    return $PID
}


check_pid_running(){
    get_pid
    if [ "${PID}" == "" ]; then
        # no PID in the PIDFILE
    RETVAL=1
    else
    RESPONSE=`ps -p ${PID} -o comm=`
    if [ "${RESPONSE}" == "pv2web_ro" ]; then
        # PID matches the pv2web_ro profile
        RETVAL=0
    else
        # PID is not pv2web_ro
        RETVAL=1
    fi
    fi
    return $RETVAL
}


start(){
    cd ${PROJECT_DIR}
    ${SCRIPT} ${CONFIGFILE} 2>&1 >> ${LOGFILE} &
    PID=$!
    /bin/echo ${PID} > ${PIDFILE}
    /bin/echo "# [$0 `/bin/date`] started ${PID}: ${SCRIPT}" 2>&1 >> ${LOGFILE} &
    /bin/echo "# [$0 `/bin/date`] started ${PID}: ${SCRIPT}"
}


stop(){
    get_pid
    check_pid_running
    
    if [ $RETVAL == 1 ]; then
    /bin/echo "# [$0 `/bin/date`] not running ${PID}: ${SCRIPT}" 2>&1 >> ${LOGFILE} &
    else
        kill ${PID}
        /bin/echo "# [$0 `/bin/date`] stopped ${PID}: ${SCRIPT}" 2>&1 >> ${LOGFILE} &
        /bin/echo "# [$0 `/bin/date`] stopped ${PID}: ${SCRIPT}"
    fi
    /bin/cp -f /dev/null ${PIDFILE}
}


restart(){
    stop
    start
}


checkup(){
    #=====================
    # call periodically (every 5 minutes) to see if livedata is running
    #=====================
    #        field      allowed values
    #      -----      --------------
    #      minute     0-59
    #      hour       0-23
    #      day of month   1-31
    #      month      1-12 (or names, see below)
    #      day of week    0-7 (0 or 7 is Sun, or use names)
    #
    # */5 * * * * /tmp/pv/manage.sh checkup 2>&1 > /dev/null


    get_pid
    check_pid_running
    if [ $RETVAL == 0 ]; then
    echo "# [$0 `/bin/date`] running fine, so it seems" 2>&1 > /dev/null
    else
    echo "# [$0 `/bin/date`] could not identify running process ${PID}, starting new process" 2>&1 >> ${LOGFILE}
    start
    fi
}


case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    restart
    ;;
  checkup)
    checkup
    ;;
  *)
    echo $"Usage: $0 {start|stop|restart|checkup}"
    exit 1
esac