run.sh 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #!/bin/bash
  2. SETT_DAEMON_MODE=1
  3. SETT_DAEMON_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
  4. # Get real directory if symlink used
  5. if [ -L "${BASH_SOURCE[0]}" ]; then
  6. realfile=`readlink -f "${BASH_SOURCE[0]}"`
  7. SETT_DAEMON_PATH="$(dirname $realfile)"
  8. fi
  9. SETT_DAEMON_FOLDER_LOGS="$SETT_DAEMON_PATH/logs"
  10. SETT_DAEMON_LOGS_WORK_FILE="$SETT_DAEMON_FOLDER_LOGS/all.log"
  11. SETT_DAEMON_PID_FILE="$SETT_DAEMON_PATH/pid"
  12. # Include funcs
  13. . "$SETT_DAEMON_PATH/funcs.sh"
  14. # Check utils
  15. check_util "mkdir"
  16. check_util "chmod"
  17. check_util "touch"
  18. check_util "cat"
  19. check_util "kill"
  20. check_util "rm"
  21. # Get real path of each util
  22. get_util "mkdir" UTIL_MKDIR
  23. get_util "chmod" UTIL_CHMOD
  24. get_util "touch" UTIL_TOUCH
  25. get_util "cat" UTIL_CAT
  26. get_util "kill" UTIL_KILL
  27. get_util "rm" UTIL_RM
  28. check() {
  29. if [ ! -d "$SETT_DAEMON_FOLDER_LOGS" ]; then
  30. $UTIL_MKDIR "$SETT_DAEMON_FOLDER_LOGS"
  31. $UTIL_CHMOD 0755 "$SETT_DAEMON_FOLDER_LOGS"
  32. fi
  33. }
  34. log_str() {
  35. process=$1
  36. shift
  37. log_date=$(date '+%F %T');
  38. log_string="[$log_date] [$$]: $*"
  39. echo "$log_string" >> "$SETT_DAEMON_LOGS_WORK_FILE"
  40. }
  41. loop() {
  42. # Include user scripts
  43. if [ -d "$SETT_DAEMON_PATH/scripts" ]; then
  44. for user_script in $SETT_DAEMON_PATH/scripts/*.sh
  45. do
  46. . $user_script
  47. done
  48. fi
  49. }
  50. start() {
  51. check
  52. if [ -f "$SETT_DAEMON_PID_FILE" ]; then
  53. _pid=`$UTIL_CAT $SETT_DAEMON_PID_FILE`
  54. is_pid_runned "$_pid" rbool
  55. if [ "$rbool" = "1" ]; then
  56. log_str "0" "Daemon already running with pid = $_pid"
  57. echo "Daemon already running with pid = $_pid"
  58. exit 0
  59. fi
  60. fi
  61. cd /
  62. if [ "$SETT_DAEMON_MODE" = 1 ]; then
  63. exec >> $SETT_DAEMON_LOGS_WORK_FILE
  64. exec 2>> $SETT_DAEMON_LOGS_WORK_FILE
  65. exec < /dev/null
  66. (
  67. while [ 1 ]
  68. do
  69. loop
  70. sleep 1
  71. done
  72. exit 0
  73. )&
  74. echo $! > $SETT_DAEMON_PID_FILE
  75. else
  76. while [ 1 ]
  77. do
  78. loop
  79. sleep 1
  80. done
  81. exit 0
  82. fi
  83. }
  84. stop() {
  85. if [ -f "$SETT_DAEMON_PID_FILE" ]; then
  86. _pid=`$UTIL_CAT $SETT_DAEMON_PID_FILE`
  87. `$UTIL_KILL $_pid`
  88. rt="$?"
  89. if [ "$rt" = "0" ]; then
  90. log_str "0" "Daemon stoped"
  91. echo "Daemon stoped"
  92. `$UTIL_RM $SETT_DAEMON_PID_FILE`
  93. else
  94. log_str "0" "Error stop daemon"
  95. echo "Error stop daemon"
  96. fi
  97. else
  98. log_str "0" "Daemon is not runned"
  99. echo "Daemon is not runned"
  100. fi
  101. }
  102. status() {
  103. if [ -f "$SETT_DAEMON_PID_FILE" ]; then
  104. _pid=`$UTIL_CAT $SETT_DAEMON_PID_FILE`
  105. is_pid_runned "$_pid" rbool
  106. if [ "$rbool" = "1" ]; then
  107. echo "Daemon is runned with pid = $_pid"
  108. else
  109. echo "Daemon is not runned"
  110. fi
  111. else
  112. echo "Daemon is not runned"
  113. fi
  114. }
  115. usage() {
  116. echo "$0 (once|start|stop|status)"
  117. }
  118. case $1 in
  119. "once")
  120. SETT_DAEMON_MODE=0
  121. start
  122. ;;
  123. "start")
  124. start
  125. ;;
  126. "stop")
  127. stop
  128. ;;
  129. "status")
  130. status
  131. ;;
  132. *)
  133. usage
  134. ;;
  135. esac
  136. exit