config 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #!/bin/bash
  2. #basename
  3. BN=`basename $0`
  4. #WORKDIR=$(cd "$(dirname "$0")"; pwd -P)
  5. WORKDIR="/usr/local/scripts"
  6. if [ ! -e "${WORKDIR}/cfg/config" ]; then
  7. echo "Config file not found!"
  8. exit 120
  9. fi
  10. . ${WORKDIR}/cfg/config
  11. #log file of working process
  12. LOG1="${log_dir}/$BN.log"
  13. #lock file for working process
  14. LOCK1="/var/run/$BN.pid"
  15. #debug
  16. DEBUG=0
  17. DEBUG_LOG=${LOG1}
  18. function log_debug {
  19. [ "${DEBUG}" -eq 0 ] && return
  20. TS="`date +%Y%m%d-%H%M%S` [$$] DEBUG:"
  21. echo "$1" | while read LINE; do
  22. echo "${TS} ${LINE}" >>${DEBUG_LOG}
  23. done
  24. }
  25. function log_info {
  26. TS="`date +%Y%m%d-%H%M%S` [$$] INFO:"
  27. echo "$1" | while read LINE; do
  28. echo "${TS} ${LINE}" >>${LOG1}
  29. done
  30. }
  31. function log_error {
  32. TS="`date +%Y%m%d-%H%M%S` [$$] ERROR:"
  33. echo "$1" | while read LINE; do
  34. echo "${TS} ${LINE}" >>${LOG1}
  35. done
  36. }
  37. [ ! -e "${log_dir}" ] && {
  38. mkdir -p ${log_dir} >/dev/null 2>&1
  39. chmod 750 ${log_dir} >/dev/null 2>&1
  40. }
  41. log_debug "Running $0 $*"
  42. log_debug "by user $USER($UID) with effective uid:$EUID"
  43. log_debug "Parent process id: $PPID (`ps --no-heading -o command -p $PPID`)."
  44. log_debug "Process id: $$"
  45. function do_exit {
  46. log_info "Script work $SECONDS sec. Exit code: $1"
  47. [ -n $1 ] && exit $1 || exit
  48. }
  49. function do_exec {
  50. FAIL="OK"
  51. eval "$1" || { FAIL="FAIL"; }
  52. log_debug "$1 - $FAIL"
  53. eval "FAIL=${FAIL}"
  54. }
  55. function exit_ifrun {
  56. log_debug "Check for always running - search pid-file $LOCK1"
  57. if [ ! -e "${LOCK1}" ]; then
  58. log_debug "Lock-file not found. It's ok."
  59. return 0
  60. fi
  61. local PID=`cat $LOCK1`
  62. FF=`ps awx | awk '{ print $1}' | grep "^$PID$"`
  63. if [ -z "$FF" ]; then
  64. log_error "Найден ничейный файл блокировки! pid=$PID. Удаляю! "
  65. do_exec "rm -f $LOCK1 >/dev/null 2>&1"
  66. else
  67. log_error "Скрипт $BN уже запущен pid=$PID. Bye..."
  68. do_exit $ERR_DUP
  69. fi
  70. }
  71. function check_run {
  72. log_debug "Check for always running - search pid-file $LOCK1"
  73. if [ ! -e "${LOCK1}" ]; then
  74. log_debug "Lock-file not found. It's ok."
  75. return 0
  76. fi
  77. while [ -f $LOCK1 ]; do
  78. local PID=`cat $LOCK1`
  79. FF=`ps awx | awk '{ print $1}' | grep "^$PID$"`
  80. if [ -z "$FF" ]; then
  81. log_error "Найден ничейный файл блокировки! pid=$PID. Удаляю! "
  82. do_exec "rm -f $LOCK1 >/dev/null 2>&1"
  83. else
  84. log_error "Скрипт $BN уже запущен pid=$PID. Жду 5 сек..."
  85. sleep 5
  86. fi
  87. done
  88. }
  89. function create_lock {
  90. log_debug "Try create lock-file - search pid $LOCK1"
  91. [ -f $LOCK1 ] && {
  92. log_error "Lock-file file found! Aborting..."
  93. exit $ERR_DUP
  94. }
  95. log_debug "Create pid file $LOCK1"
  96. do_exec "echo '$$'>$LOCK1"
  97. }
  98. function remove_lock {
  99. if [ ! -e "${LOCK1}" ]; then
  100. log_error "Lock-file not found. Why?!"
  101. return 0
  102. fi
  103. local PID=`cat $LOCK1`
  104. if [ $PID -ne $$ ]; then
  105. log_error "Файл блокировки принадлежит другому процессу с pid=$PID, мой pid=$$. Exiting... "
  106. do_exit $ERR_DUP
  107. else
  108. log_debug "Remove pid file."
  109. do_exec "rm -f $LOCK1 >/dev/null 2>&1"
  110. fi
  111. }