v-list-sys-services 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. #!/bin/bash
  2. # info: list system services
  3. # options: [FORMAT]
  4. #
  5. # The function for obtaining the list of configured system services.
  6. #----------------------------------------------------------#
  7. # Variable&Function #
  8. #----------------------------------------------------------#
  9. # Argument definition
  10. format=${1-shell}
  11. # Includes
  12. source $VESTA/func/main.sh
  13. source $VESTA/conf/vesta.conf
  14. export PATH=$PATH:/sbin
  15. # JSON list function
  16. json_list() {
  17. IFS=$'\n'
  18. i=1
  19. objects=$(echo -e "$data" |grep NAME |wc -l)
  20. echo "{"
  21. while read str; do
  22. eval $str
  23. echo -n ' "'$NAME'": {
  24. "SYSTEM": "'$SYSTEM'",
  25. "STATE": "'$STATE'",
  26. "CPU": "'$CPU'",
  27. "MEM": "'$MEM'",
  28. "RTIME": "'$RTIME'"
  29. }'
  30. if [ "$i" -lt "$objects" ]; then
  31. echo ','
  32. else
  33. echo
  34. fi
  35. ((i++))
  36. done < <(echo -e "$data" |grep NAME)
  37. echo '}'
  38. }
  39. # SHELL list function
  40. shell_list() {
  41. IFS=$'\n'
  42. echo "NAME STATE CPU MEM UPTIME"
  43. echo "---- ----- --- --- ------"
  44. while read str; do
  45. eval $str
  46. echo "$NAME $STATE $CPU $MEM $RTIME"
  47. done < <(echo -e "$data" |grep NAME)
  48. }
  49. # PLAIN list function
  50. plain_list() {
  51. IFS=$'\n'
  52. while read str; do
  53. eval $str
  54. echo -e "$NAME\t$SYSTEM\t$STATE\t$CPU\t$MEM\t$RTIME"
  55. done < <(echo -e "$data" |grep NAME)
  56. }
  57. # CSV list function
  58. csv_list() {
  59. IFS=$'\n'
  60. echo "NAME,SYSTEM,STATE,CPU,MEM,RTIME"
  61. while read str; do
  62. eval $str
  63. echo "$NAME,\"$SYSTEM\",$STATE,$CPU,$MEM,$RTIME"
  64. done < <(echo -e "$data" |grep NAME)
  65. }
  66. # Get service state function
  67. get_srv_state() {
  68. srv=$1
  69. name=${2-$1}
  70. state='running'
  71. # Searching related pids
  72. if [ -z $3 ]; then
  73. pids=$(pidof $name |tr ' ' '|')
  74. else
  75. pids=$(pidof -x $name |tr ' ' '|')
  76. fi
  77. if [ -z "$pids" ] && [ "$name" != 'nginx' ]; then
  78. pids=$(pgrep $name |tr '\n' '|')
  79. fi
  80. # Checking pid
  81. if [ ! -z "$pids" ]; then
  82. pid=$(echo "$pids" |cut -f 1 -d '|')
  83. pids=$(egrep "$pids" $tmp_file)
  84. # Calculating CPU usage
  85. cpu=$(echo "$pids" |awk '{ sum += $2} END {print sum}')
  86. # Calculating memory usage
  87. mem=$(echo "$pids" |awk '{sum += $3} END {print sum/1024 }')
  88. mem=$(printf "%.0f\n" $mem)
  89. # Searching pid file
  90. pid_file=''
  91. if [ -e "/var/run/$srv.pid" ]; then
  92. pid_file="/var/run/$srv.pid"
  93. fi
  94. if [ -z "$pid_file" ] && [ -e "/var/run/$srv/$srv.pid" ]; then
  95. pid_file="/var/run/$srv/$srv.pid"
  96. fi
  97. if [ -z "$pid_file" ] && [ -e "/var/run/$name/$name.pid" ]; then
  98. pid_file="/var/run/$name/$name.pid"
  99. fi
  100. if [ -z "$pid_file" ] && [ -e "/proc/$pid" ]; then
  101. pid_file="/proc/$pid"
  102. fi
  103. # Calculating uptime
  104. if [ ! -z "$pid_file" ]; then
  105. mtime=$(stat -c "%Y" $pid_file)
  106. rtime=$((ctime - mtime))
  107. rtime=$((rtime / 60))
  108. else
  109. rtime=0
  110. fi
  111. else
  112. state='stopped'
  113. mem=0
  114. cpu=0
  115. rtime="0"
  116. fi
  117. }
  118. #----------------------------------------------------------#
  119. # Action #
  120. #----------------------------------------------------------#
  121. # Saving current proccess list
  122. tmp_file=$(mktemp)
  123. ps -eo pid,pcpu,size > $tmp_file
  124. # Checking current time
  125. ctime=$(date +%s)
  126. # Checking WEB system
  127. if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'remote' ]; then
  128. get_srv_state $WEB_SYSTEM
  129. data="NAME='$WEB_SYSTEM' SYSTEM='web server' STATE='$state' CPU='$cpu'"
  130. data="$data MEM='$mem' RTIME='$rtime'"
  131. fi
  132. # Checking WEB Backend
  133. if [ ! -z "$WEB_BACKEND" ] && [ "$WEB_BACKEND" != 'remote' ]; then
  134. get_srv_state $WEB_BACKEND
  135. data="$data\nNAME='$WEB_BACKEND' SYSTEM='backend server' STATE='$state'"
  136. data="$data CPU='$cpu' MEM='$mem' RTIME='$rtime'"
  137. fi
  138. # Checking WEB Proxy
  139. if [ ! -z "$PROXY_SYSTEM" ] && [ "$PROXY_SYSTEM" != 'remote' ]; then
  140. get_srv_state $PROXY_SYSTEM
  141. data="$data\nNAME='$PROXY_SYSTEM' SYSTEM='reverse proxy' STATE='$state'"
  142. data="$data CPU='$cpu' MEM='$mem' RTIME='$rtime'"
  143. fi
  144. # Checking DNS system
  145. if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'remote' ]; then
  146. if [ "$DNS_SYSTEM" == 'bind' ] || [ "$DNS_SYSTEM" == 'bind9' ]; then
  147. proc_name='named'
  148. fi
  149. get_srv_state $DNS_SYSTEM $proc_name
  150. data="$data\nNAME='$DNS_SYSTEM' SYSTEM='dns server' STATE='$state'"
  151. data="$data CPU='$cpu' MEM='$mem' RTIME='$rtime'"
  152. fi
  153. # Checking MAIL system
  154. if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'remote' ]; then
  155. get_srv_state $MAIL_SYSTEM
  156. data="$data\nNAME='$MAIL_SYSTEM' SYSTEM='mail server' STATE='$state'"
  157. data="$data CPU='$cpu' MEM='$mem' RTIME='$rtime'"
  158. fi
  159. # Checking MAIL IMAP
  160. if [ ! -z "$IMAP_SYSTEM" ] && [ "$IMAP_SYSTEM" != 'remote' ]; then
  161. get_srv_state $IMAP_SYSTEM
  162. data="$data\nNAME='$IMAP_SYSTEM' SYSTEM='pop/imap server' STATE='$state'"
  163. data="$data CPU='$cpu' MEM='$mem' RTIME='$rtime'"
  164. fi
  165. # Checking MAIL ANTIVIRUS
  166. if [ ! -z "$ANTIVIRUS_SYSTEM" ] && [ "$ANTIVIRUS_SYSTEM" != 'remote' ]; then
  167. if [ -e "/etc/redhat-release" ]; then
  168. if [ "$ANTIVIRUS_SYSTEM" == 'clamav' ];then
  169. ANTIVIRUS_SYSTEM='clamd'
  170. fi
  171. get_srv_state $ANTIVIRUS_SYSTEM
  172. else
  173. if [ "$ANTIVIRUS_SYSTEM" == 'clamav-daemon' ];then
  174. proc_name='clamd'
  175. fi
  176. get_srv_state $ANTIVIRUS_SYSTEM $proc_name
  177. fi
  178. data="$data\nNAME='$ANTIVIRUS_SYSTEM' SYSTEM='email antivirus'"
  179. data="$data STATE='$state' CPU='$cpu' MEM='$mem' RTIME='$rtime'"
  180. proc_name=''
  181. fi
  182. # Checking MAIL ANTISPAM
  183. if [ ! -z "$ANTISPAM_SYSTEM" ] && [ "$ANTISPAM_SYSTEM" != 'remote' ]; then
  184. get_srv_state $ANTISPAM_SYSTEM spamd
  185. data="$data\nNAME='$ANTISPAM_SYSTEM' SYSTEM='email antispam'"
  186. data="$data STATE='$state' CPU='$cpu' MEM='$mem' RTIME='$rtime'"
  187. fi
  188. # Checking DB system
  189. if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'remote' ]; then
  190. for db in ${DB_SYSTEM//,/ }; do
  191. proc_name=''
  192. service="$db"
  193. if [ "$service" = 'mysql' ]; then
  194. if [ -e "/etc/redhat-release" ]; then
  195. service='mysqld'
  196. proc_name='mysqld'
  197. if [ -e "/usr/lib/systemd/system/mariadb.service" ]; then
  198. service='mariadb'
  199. fi
  200. fi
  201. fi
  202. if [ "$service" == 'pgsql' ]; then
  203. service='postgresql'
  204. proc_name='postmaster'
  205. if [ ! -e "/etc/redhat-release" ]; then
  206. proc_name='postgres'
  207. fi
  208. if [ ! -e '/etc/init.d/postgresql' ]; then
  209. proc_name='postgres'
  210. fi
  211. fi
  212. get_srv_state $service $proc_name
  213. data="$data\nNAME='$service' SYSTEM='database server' STATE='$state'"
  214. data="$data CPU='$cpu' MEM='$mem' RTIME='$rtime'"
  215. proc_name=''
  216. done
  217. fi
  218. # Checking FTP system
  219. if [ ! -z "$FTP_SYSTEM" ] && [ "$FTP_SYSTEM" != 'remote' ]; then
  220. get_srv_state $FTP_SYSTEM
  221. data="$data\nNAME='$FTP_SYSTEM' SYSTEM='ftp server' STATE='$state'"
  222. data="$data CPU='$cpu' MEM='$mem' RTIME='$rtime'"
  223. fi
  224. # Checking CRON system
  225. if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'remote' ]; then
  226. get_srv_state $CRON_SYSTEM
  227. data="$data\nNAME='$CRON_SYSTEM' SYSTEM='job scheduler' STATE='$state'"
  228. data="$data CPU='$cpu' MEM='$mem' RTIME='$rtime'"
  229. fi
  230. # Checking FIREWALL system
  231. if [ ! -z "$FIREWALL_SYSTEM" ] && [ "$FIREWALL_SYSTEM" != 'remote' ]; then
  232. state="stopped"
  233. /sbin/iptables -L vesta >/dev/null 2>&1
  234. if [ "$?" -eq 0 ]; then
  235. state="running"
  236. fi
  237. str="$str\nNAME='$FIREWALL_SYSTEM' SYSTEM='firewall'"
  238. str="$str STATE='$state' CPU='0' MEM='0' RTIME='0'"
  239. fi
  240. # Checking FIREWALL Fail2ban extention
  241. if [ ! -z "$FIREWALL_EXTENSION" ]; then
  242. get_srv_state $FIREWALL_EXTENSION fail2ban-server script
  243. data="$data\nNAME='$FIREWALL_EXTENSION' SYSTEM='brute-force monitor'"
  244. data="$data STATE='$state' CPU='$cpu' MEM='$mem' RTIME='$rtime'"
  245. fi
  246. # Listing data
  247. case $format in
  248. json) json_list ;;
  249. plain) plain_list ;;
  250. csv) csv_list ;;
  251. shell) shell_list |column -t ;;
  252. esac
  253. #----------------------------------------------------------#
  254. # Vesta #
  255. #----------------------------------------------------------#
  256. exit