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