| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #!/bin/bash
- #basename
- BN=`basename $0`
- #WORKDIR=$(cd "$(dirname "$0")"; pwd -P)
- WORKDIR="/opt/Eye/scripts"
- if [ ! -e "${WORKDIR}/cfg/config" ]; then
- echo "Config file not found!"
- exit 120
- fi
- . ${WORKDIR}/cfg/config
- #log file of working process
- LOG1="${log_dir}/$BN.log"
- #lock file for working process
- LOCK1="/run/$BN.pid"
- #debug
- DEBUG=0
- DEBUG_LOG=${LOG1}
- function log_debug {
- [ "${DEBUG}" -eq 0 ] && return
- TS="`date +%Y%m%d-%H%M%S` [$$] DEBUG:"
- echo "$1" | while read LINE; do
- echo "${TS} ${LINE}" >>${DEBUG_LOG}
- done
- }
- function log_info {
- TS="`date +%Y%m%d-%H%M%S` [$$] INFO:"
- echo "$1" | while read LINE; do
- echo "${TS} ${LINE}" >>${LOG1}
- done
- }
- function log_error {
- TS="`date +%Y%m%d-%H%M%S` [$$] ERROR:"
- echo "$1" | while read LINE; do
- echo "${TS} ${LINE}" >>${LOG1}
- done
- }
- [ ! -e "${log_dir}" ] && {
- mkdir -p ${log_dir} >/dev/null 2>&1
- chmod 750 ${log_dir} >/dev/null 2>&1
- }
- log_debug "Running $0 $*"
- log_debug "by user $USER($UID) with effective uid:$EUID"
- log_debug "Parent process id: $PPID (`ps --no-heading -o command -p $PPID`)."
- log_debug "Process id: $$"
- function do_exit {
- log_info "Script work $SECONDS sec. Exit code: $1"
- [ -n $1 ] && exit $1 || exit
- }
- function do_exec {
- FAIL="OK"
- eval "$1" || { FAIL="FAIL"; }
- log_debug "$1 - $FAIL"
- eval "FAIL=${FAIL}"
- }
- function exit_ifrun {
- log_debug "Check for always running - search pid-file $LOCK1"
- if [ ! -e "${LOCK1}" ]; then
- log_debug "Lock-file not found. It's ok."
- return 0
- fi
- local PID=`cat $LOCK1`
- FF=`ps awx | awk '{ print $1}' | grep "^$PID$"`
- if [ -z "$FF" ]; then
- log_error "Найден ничейный файл блокировки! pid=$PID. Удаляю! "
- do_exec "rm -f $LOCK1 >/dev/null 2>&1"
- else
- log_error "Скрипт $BN уже запущен pid=$PID. Bye..."
- do_exit $ERR_DUP
- fi
- }
- function check_run {
- log_debug "Check for always running - search pid-file $LOCK1"
- if [ ! -e "${LOCK1}" ]; then
- log_debug "Lock-file not found. It's ok."
- return 0
- fi
- while [ -f $LOCK1 ]; do
- local PID=`cat $LOCK1`
- FF=`ps awx | awk '{ print $1}' | grep "^$PID$"`
- if [ -z "$FF" ]; then
- log_error "Найден ничейный файл блокировки! pid=$PID. Удаляю! "
- do_exec "rm -f $LOCK1 >/dev/null 2>&1"
- else
- log_error "Скрипт $BN уже запущен pid=$PID. Жду 5 сек..."
- sleep 5
- fi
- done
- }
- function create_lock {
- log_debug "Try create lock-file - search pid $LOCK1"
- [ -f $LOCK1 ] && {
- log_error "Lock-file file found! Aborting..."
- exit $ERR_DUP
- }
- log_debug "Create pid file $LOCK1"
- do_exec "echo '$$'>$LOCK1"
- }
- function remove_lock {
- if [ ! -e "${LOCK1}" ]; then
- log_error "Lock-file not found. Why?!"
- return 0
- fi
- local PID=`cat $LOCK1`
- if [ $PID -ne $$ ]; then
- log_error "Файл блокировки принадлежит другому процессу с pid=$PID, мой pid=$$. Exiting... "
- do_exit $ERR_DUP
- else
- log_debug "Remove pid file."
- do_exec "rm -f $LOCK1 >/dev/null 2>&1"
- fi
- }
|