cron_func.sh 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. get_next_cron_string() {
  2. # Parsing config
  3. curr_str=$(grep "JOB=" $V_USERS/$user/crontab.conf|cut -f 2 -d \'|\
  4. sort -n|tail -n1)
  5. # Print result
  6. echo "$((curr_str +1))"
  7. }
  8. is_cron_job_free() {
  9. # Checking record id
  10. check_job=$(grep "JOB='$job'" $V_USERS/$user/crontab.conf)
  11. if [ ! -z "$check_job" ]; then
  12. echo "Error: job exist"
  13. log_event 'debug' "$E_JOB_EXIST $V_EVENT"
  14. exit $E_JOB_EXIST
  15. fi
  16. }
  17. sort_cron_jobs() {
  18. # Defining conf
  19. conf="$V_USERS/$user/crontab.conf"
  20. cat $conf |sort -n -k 2 -t \' >$conf.tmp
  21. mv -f $conf.tmp $conf
  22. }
  23. sync_cron_jobs() {
  24. conf="/var/spool/cron/$user"
  25. # Deleting old data
  26. rm -f $conf
  27. # Checking reporting system
  28. rep=$(grep 'REPORTS=' $V_USERS/$user/user.conf | cut -f 2 -d \')
  29. if [ "$rep" = 'yes' ]; then
  30. email=$(grep 'CONTACT=' $V_USERS/$user/user.conf | cut -f 2 -d \')
  31. echo "MAILTO=$email" >$conf
  32. fi
  33. # Reading user crontab.conf
  34. while read line ; do
  35. # Defining new delimeter
  36. IFS=$'\n'
  37. # Parsing key=value
  38. for key in $(echo $line|sed -e "s/' /'\n/g"); do
  39. eval ${key%%=*}="${key#*=}"
  40. done
  41. if [ "$SUSPEND" = 'no' ] ; then
  42. # Adding line to system cron
  43. echo "$MIN $HOUR $DAY $MONTH $WDAY $CMD" |\
  44. sed -e "s/%quote%/'/g" -e "s/%dots%/:/g" >> $conf
  45. fi
  46. done <$V_USERS/$user/crontab.conf
  47. }
  48. is_job_valid() {
  49. result=$(grep "JOB='$job'" $V_USERS/$user/crontab.conf)
  50. if [ -z "$result" ]; then
  51. echo "Error: job not exists"
  52. log_event 'debug' "$E_JOB_NOTEXIST $V_EVENT"
  53. exit $E_JOB_NOTEXIST
  54. fi
  55. }
  56. del_cron_job() {
  57. str=$(grep -n "JOB='$job'" $V_USERS/$user/crontab.conf|cut -f 1 -d :)
  58. sed -i "$str d" $V_USERS/$user/crontab.conf
  59. }
  60. crn_json_list() {
  61. i='1' # iterator
  62. end=$(($limit + $offset)) # last string
  63. # Print top bracket
  64. echo '{'
  65. # Reading file line by line
  66. while read line ; do
  67. # Checking offset and limit
  68. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  69. then
  70. # Defining new delimeter
  71. IFS=$'\n'
  72. # Parsing key=value
  73. for key in $(echo $line|sed -e "s/' /'\n/g"); do
  74. eval ${key%%=*}="${key#*=}"
  75. done
  76. # Checking !first line to print bracket
  77. if [ "$i" -ne "$offset" ]; then
  78. echo -e "\t},"
  79. fi
  80. j=1 # local loop iterator
  81. last_word=$(echo "$fields" | wc -w)
  82. # Restoring old delimeter
  83. IFS=' '
  84. # Print data
  85. for field in $fields; do
  86. eval value=\"$field\"
  87. value=$(echo "$value"|sed -e 's/"/\\"/g' -e "s/%quote%/'/g")
  88. # Checking parrent key
  89. if [ "$j" -eq 1 ]; then
  90. echo -e "\t\"$value\": {"
  91. else
  92. if [ "$j" -eq "$last_word" ]; then
  93. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
  94. else
  95. echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
  96. fi
  97. fi
  98. j=$(($j + 1))
  99. done
  100. fi
  101. i=$(($i + 1))
  102. done < $conf
  103. # If there was any output
  104. if [ -n "$value" ]; then
  105. echo -e "\t}"
  106. fi
  107. # Printing bottom json bracket
  108. echo -e "}"
  109. }
  110. crn_shell_list() {
  111. i='1' # iterator
  112. end=$(($limit + $offset)) # last string
  113. # Print brief info
  114. echo "${fields//$/}"
  115. for a in $(echo ${fields//\~/ /}); do
  116. echo -e "-----~\c"
  117. done
  118. echo
  119. # Reading file line by line
  120. while read line ; do
  121. # Checking offset and limit
  122. if [ "$i" -ge "$offset" ] && [ "$i" -lt "$end" ] && [ "$offset" -gt 0 ]
  123. then
  124. # Defining new delimeter
  125. IFS=$'\n'
  126. # Parsing key=value
  127. for key in $(echo $line|sed -e "s/' /'\n/g"); do
  128. eval ${key%%=*}="${key#*=}"
  129. done
  130. # Print result line
  131. eval echo "\"$fields\""|sed -e "s/%quote%/'/g"
  132. fi
  133. i=$(($i + 1))
  134. done < $conf
  135. }
  136. is_job_suspended() {
  137. # Parsing jobs
  138. str=$(grep "JOB='$job'" $V_USERS/$user/crontab.conf|grep "SUSPEND='yes'" )
  139. # Checkng key
  140. if [ ! -z "$str" ]; then
  141. echo "Error: job suspended"
  142. log_event 'debug' "$E_JOB_SUSPENDED $V_EVENT"
  143. exit $E_JOB_SUSPENDED
  144. fi
  145. }
  146. is_job_unsuspended() {
  147. # Parsing jobs
  148. str=$(grep "JOB='$job'" $V_USERS/$user/crontab.conf|grep "SUSPEND='no'" )
  149. # Checkng key
  150. if [ ! -z "$str" ]; then
  151. echo "Error: job unsuspended"
  152. log_event 'debug' "$E_JOB_UNSUSPENDED $V_EVENT"
  153. exit $E_JOB_UNSUSPENDED
  154. fi
  155. }
  156. update_cron_job_value() {
  157. key="$1"
  158. value="$2"
  159. # Defining conf
  160. conf="$V_USERS/$user/crontab.conf"
  161. # Parsing conf
  162. job_str=$(grep -n "JOB='$job'" $conf)
  163. str_number=$(echo $job_str | cut -f 1 -d ':')
  164. str=$(echo $job_str | cut -f 2 -d ':')
  165. # Parsing key=value
  166. IFS=$'\n'
  167. for keys in $(echo $str|sed -e "s/' /'\n/g"); do
  168. eval ${keys%%=*}=${keys#*=}
  169. done
  170. # Defining clean key
  171. c_key=$(echo "${key//$/}")
  172. eval old="${key}"
  173. # Escaping slashes
  174. old=$(echo "$old" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  175. new=$(echo "$value" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
  176. # Updating conf
  177. sed -i "$str_number s/$c_key='${old//\*/\\*}'/$c_key='${new//\*/\\*}'/g" \
  178. $conf
  179. }
  180. cron_clear_search() {
  181. # Defining delimeter
  182. IFS=$'\n'
  183. # Reading file line by line
  184. for line in $(grep $search_string $conf); do
  185. # Defining new delimeter
  186. IFS=$'\n'
  187. # Parsing key=value
  188. for key in $(echo $line|sed -e "s/' /'\n/g"); do
  189. eval ${key%%=*}=${key#*=}
  190. done
  191. # Print result line
  192. eval echo "$field"
  193. done
  194. }