Apache Tomcat Manager 1.0

Abbr. atm

Suitable for:
    Apache Tomcat 7.0.47

89676A512AD625916857EE981AA506E8  atm
FB340E537105341CFACDDD700F02FA7B  atm.ini

默认会排序,可以通过执行多条命令来抑制,如:
atm -m 2; atm -m 3; atm -m 1

atm.ini

1 # PRG_HOME_DIRS - program home directories, separated by ":"
2 PRG_HOME_DIRS=/opt/data/devel/apache-tomcat-7.0.47/p54321:/opt/data/devel/apache-tomcat-7.0.47/p6666:/opt/data/devel/apache-tomcat-7.0.47/p80
3 #EOF

atm

  1 #!/bin/sh
  2
  3 # program home directories
  4 phd_arr=()
  5
  6 echo_n(){
  7     echo -e "\033[30;32m$*\033[0m"
  8 }
  9
 10 echo_e(){
 11     echo -e "\033[30;35m$*\033[0m"
 12 }
 13
 14 show_usage(){
 15     echo
 16     echo_n "Apache Tomcat Manager 1.0"
 17     echo_n "Report bugs to <[email protected]>."
 18     echo
 19     echo "Usage: ${0##*/} [OPTION]..."
 20     printf "\t%-8s%s\n" "-g" "Generate optimal ‘PRG_HOME_DIRS‘."
 21     printf "\t%-8s%s\n" "-l" "List program home directories."
 22     printf "\t%-8s%s\n" "-s" "Query program state."
 23     printf "\t\t%-8s%s\n" "-h" "State is ‘Halted‘."
 24     printf "\t\t%-8s%s\n" "-r" "State is ‘Running‘."
 25     printf "\t\t%-8s%s\n" "-a" "State is ‘Abnormal‘."
 26     printf "\t\t%-8s%s\n" "-ra" "State is ‘Running‘ or ‘Abnormal‘."
 27     printf "\t%-8s%s\n" "-d" "Diagnosing program state."
 28     printf "\t%-8s%s\n" "-r" "Run program."
 29     printf "\t%-8s%s\n" "-h" "Halt program."
 30     printf "\t%-8s%s\n" "-k" "Kill program."
 31     printf "\t%-8s%s\n" "-fk" "Force kill program."
 32     printf "\t%-8s%s\n" "-m" "Monitoring log (Ctrl+\)."
 33     printf "\t%-8s%s\n" "-c" "Clean up the cache and garbage."
 34     printf "\t%-8s%s\n" "-R" "Rerun program."
 35     printf "\t%-8s%s\n" "-D" "Deploy web application archive."
 36     echo
 37 }
 38
 39 init_prg_col_width(){
 40     chk_widest "${phd_arr[*]}"
 41     PHD_COL_W=$WIDEST
 42 }
 43
 44 chk_widest(){
 45     local i= max=0 arr=($1)
 46     for((i=0;i<${#arr[*]};i++)); do
 47         if [ ${#arr[$i]} -gt $max ]; then
 48             max=${#arr[$i]}
 49         fi
 50     done
 51     WIDEST=$max
 52 }
 53
 54 is_prg_id(){
 55     if (( ${#phd_arr[*]} > 0 )) && (( $1 >= 0 )) && (( $1 < ${#phd_arr[*]} )); then
 56         echo true
 57     else
 58         echo false
 59     fi
 60 }
 61
 62 chk_process(){
 63     unset PID_ARR
 64     PID_ARR=()
 65     PID_SIZE=0
 66     local proc_part=${phd_arr[$1]}
 67     if [ ! -z "$proc_part" ]; then
 68         local search_result=`ps -ef | grep "$proc_part" | grep -v "grep $proc_part"`
 69         PID_ARR=(`echo "$search_result" | awk ‘{ print $2 }‘`)
 70         PID_SIZE=${#PID_ARR[*]}
 71         return 1
 72     fi
 73 }
 74
 75 chk_status(){
 76     local rtn=0 arr=("Not running" "OK" "Abnormal")
 77     chk_process $1
 78     rtn=$PID_SIZE
 79     if [ $PID_SIZE -gt 1 ]; then
 80         rtn=2
 81     fi
 82     STATE_LABEL=${arr[$rtn]}
 83     return $rtn
 84 }
 85
 86 print_header(){
 87     printf "%4s\t%11s\t%${PHD_COL_W}s\n" "ID" "State" "Program Home Directory"
 88 }
 89
 90 show_status(){
 91     if [ -z "$1" ]||`is_contains "$1" "-h -r -a -ra"`; then
 92         local i= t_body=
 93         for((i=0;i<${#phd_arr[*]};i++)); do
 94             chk_status $i
 95             local rtn=$?
 96             if [ -z "$1" ] || [[ "$1" = "-h" && (( $rtn == 0 )) ]] || [[ "$1" = "-r" && (( $rtn == 1 )) ]] || [[ "$1" = "-a" && (( $rtn == 2 )) ]] || [[ "$1" = "-ra" && (( $rtn != 0 )) ]]; then
 97                 local t_tr=`printf "%4s\t%11s\t%-${PHD_COL_W}s\n" "$(expr $i + 1)" "$STATE_LABEL" "${phd_arr[$i]}"`
 98                 if [ -z "$t_body" ]; then
 99                     t_body="$t_tr\n"
100                 else
101                     t_body="$t_body$t_tr\n"
102                 fi
103             fi
104         done
105         if [ -z "$t_body" ]; then
106             echo_e No data.
107         else
108             print_header
109             echo -e "$t_body"
110         fi
111     else
112         show_usage
113         exit
114     fi
115 }
116
117 exec_prg(){
118     #for p in "[email protected]"; do
119     #    echo [$p]
120     #done
121     local state_filter=
122     if `is_contains "$1" "-r -c"`; then
123         state_filter="-h"
124     elif `is_contains "$1" "-h -m"`; then
125         state_filter="-r"
126     elif `is_contains "$1" "-d -k -fk"`; then
127         state_filter="-ra"
128     fi
129     if [ $# -eq 1 ]; then
130         local result="`show_status $state_filter`"
131         echo "$result"
132         if [ `echo "$result" | wc -l` -gt 1 ]; then
133             echo -e "Examples:\n\t${0##*/} $1 8 4 2 1..."
134         fi
135     else
136         local opt1=$1 tmp_str=
137         while [ $# -gt 1 ]; do
138             local tpi=`to_positive_integer "$2"`
139             if [ ! -z "$tpi" ]&&[ $tpi -le ${#phd_arr[*]} ]; then
140                 if [ -z "$tmp_str" ]; then
141                     tmp_str=$tpi
142                 else
143                     tmp_str="$tmp_str $tpi"
144                 fi
145             fi
146             shift
147         done
148         local id= idx= executed_idxs= diagnose_header=true
149         for id in `echo -e "${tmp_str// /\\n}" | sort -nu`; do
150             idx=$(expr $id - 1)
151             if `is_prg_id $idx`; then
152                 chk_status $idx
153                 local rtn=$?
154                 if [ "$opt1" = "-R" ] || ( `is_contains "$opt1" "-c -r"` && (( $rtn == 0 )) ) || ( `is_contains "$opt1" "-h -m"` && (( $rtn == 1 )) ) || ( `is_contains "$opt1" "-d -k -fk"` && (( $rtn != 0 )) ); then
155                     local cmd=
156                     local phd=${phd_arr[$idx]}
157                     if [ "$opt1" = "-r" ]; then
158                         echo_n "Run ($id) ‘$phd‘."
159                         cmd="$phd/bin/startup.sh"
160                     elif [ "$opt1" = "-h" ]; then
161                         echo_n "Halt ($id) ‘$phd‘."
162                         cmd="$phd/bin/shutdown.sh"
163                     elif [ "$opt1" = "-m" ]; then
164                         echo_n "Monitoring ($id) ‘$phd‘."
165                         pushd $phd/logs >/dev/null 2>&1
166                         tail -f catalina.out
167                         popd >/dev/null 2>&1
168                     elif [ "$opt1" = "-c" ]; then
169                         echo_n "Clean up ($id) ‘$phd‘."
170                         echo -e "\t--> logs"
171                         pushd $phd/logs >/dev/null 2>&1
172                         rm -rfv *
173                         popd >/dev/null 2>&1
174                         echo -e "\t--> work"
175                         pushd $phd/work >/dev/null 2>&1
176                         rm -rfv *
177                         popd >/dev/null 2>&1
178                     elif [ "$opt1" = "-R" ]; then
179                         echo_n "Rerun ($id) ‘$phd‘."
180                         if [ $rtn -eq 1 ]; then
181                             echo_n "Shutting down..."
182                             "$phd/bin/shutdown.sh" >/dev/null 2>&1
183                             sleep 1
184                         fi
185                         chk_status $idx
186                         if [ $? -eq 1 ]; then
187                             echo_n "Kill..."
188                             kill ${PID_ARR[*]} >/dev/null 2>&1
189                             sleep 1
190                         fi
191                         chk_status $idx
192                         if [ $? -ne 0 ]; then
193                             echo_n "Force kill..."
194                             kill -9 ${PID_ARR[*]} >/dev/null 2>&1
195                             sleep 1
196                         fi
197                         chk_status $idx
198                         if [ $? -eq 0 ]; then
199                             echo_n "Starting..."
200                             cmd="$phd/bin/startup.sh"
201                         else
202                             echo_e "Unable to end process."
203                         fi
204                     elif [ "$opt1" = "-d" ]; then
205                         if $diagnose_header; then
206                             printf "%4s\t%5s\t%11s\t%${PHD_COL_W}s\n" "ID" "PID" "State" "Program Home Directory"
207                             diagnose_header=false
208                         fi
209                         local d_pid=
210                         for d_pid in ${PID_ARR[*]}; do
211                             printf "%4s\t%5s\t%11s\t%-${PHD_COL_W}s\n" "$id" "$d_pid" "$STATE_LABEL" "$phd"
212                         done
213                     elif [ "$opt1" = "-k" ]; then
214                         echo_n "Kill ($id) ‘$phd‘."
215                         cmd="kill ${PID_ARR[*]}"
216                     elif [ "$opt1" = "-fk" ]; then
217                         echo_n "Force kill ($id) ‘$phd‘."
218                         cmd="kill -9 ${PID_ARR[*]}"
219                     fi
220                     if [ ! -z "$cmd" ]; then
221                         `$cmd >/dev/null 2>&1`
222                     fi
223                     if [ -z "$executed_idxs" ]; then
224                         executed_idxs=$idx
225                     else
226                         executed_idxs="$executed_idxs $idx"
227                     fi
228                 fi
229             fi
230         done
231         if [ ! -z "$executed_idxs" ]; then
232             if `is_contains "$opt1" "-r -h -k -fk -R"`; then
233                 print_header
234                 local idx=
235                 for idx in $executed_idxs; do
236                     chk_status $idx
237                     printf "%4s\t%11s\t%-${PHD_COL_W}s\n" "$(expr $idx + 1)" "$STATE_LABEL" "${phd_arr[$idx]}"
238                 done
239                 echo_n "The command completed successfully."
240             fi
241         else
242             echo_e Nothing to do.
243         fi
244     fi
245 }
246
247 is_contains(){
248     local ps=
249     for ps in $2; do
250         if [ "$ps" = "$1" ]; then
251             echo true
252             return 1
253         fi
254     done
255     echo false
256 }
257
258 chk_positive_integer(){
259     POS_INT=
260     local nstr=`trim "$1"`
261     echo "$nstr" | grep "[^0-9]" >/dev/null 2>&1
262     if [ $? -eq 1 ]&&[ ! -z "$nstr" ]; then
263         local t=$(expr $nstr + 0)
264         if (( $t > 0 )); then
265             POS_INT=$t
266             return 1
267         fi
268     fi
269 }
270
271 to_positive_integer(){
272     chk_positive_integer "$1"
273     echo $POS_INT
274 }
275
276 trim(){
277     echo $1
278 }
279
280 one_slash(){
281     local src="$1"
282     while [[ "$src" == *//* ]]; do
283         local slash1="/" slash2="//"
284         src="${src//$slash2/$slash1}"
285     done
286     echo $src
287 }
288
289 to_canonical_path(){
290     local path=`trim "$1"`
291     if [ ! -z "$path" ]&&[ -e "$path" ]; then
292         local result=
293         if [ -d "$path" ]; then
294             result=`cd "$path"; pwd`
295         elif [ -f "$path" ]; then
296             local directory=`dirname "$path"`
297             directory=`cd "$directory"; pwd`
298             local filename=`basename "$path"`
299             result="$directory/$filename"
300         fi
301         result=`one_slash "$result"`
302         echo $result
303     fi
304 }
305
306 main(){
307     # Show usage
308     if [ -z "$1" ]; then
309         show_usage
310         exit
311     fi
312
313     # Read configuration file
314     local line=
315     while read line; do
316         eval "$line"
317     done < ${0%%.*}.ini
318
319     # Filling phd_arr
320     local phd= index=0
321     for phd in `echo -e "${PRG_HOME_DIRS//:/\\n}" | sort -u`; do
322         phd=`to_canonical_path "$phd"`
323         if [ ! -z "$phd" ]&&[ -x "$phd/bin/startup.sh" ]&&[ -x "$phd/bin/shutdown.sh" ]&&[ -d "$phd/webapps" ]&&[ -d "$phd/work" ]&&[ -d "$phd/logs" ]; then
324             phd_arr[$index]="$phd"
325             let "index+=1"
326         fi
327     done
328     local tmp_str="${phd_arr[*]}"
329     tmp_str=`echo -e "${tmp_str// /\\n}" | sort -u`
330     unset phd_arr
331     phd_arr=($tmp_str)
332
333     # Check the quantity
334     local max_phds=99
335     if [ ${#phd_arr[*]} -gt $max_phds ]; then
336         echo_e "Error: ‘PRG_HOME_DIRS‘ exceeds $max_phds."
337         exit
338     fi
339
340     # Initialize the maximum width of the column
341     init_prg_col_width
342
343     # Parameter matching
344     if [ "$1" == "-g" ]; then
345         local tmp_str="${phd_arr[*]}"
346         echo -e "PRG_HOME_DIRS=${tmp_str// /:}"
347     elif [ "$1" == "-l" ]; then
348         if [ ${#phd_arr[*]} -gt 0 ]; then
349             printf "%4s\t%${PHD_COL_W}s\n" "ID" "Program Home Directory"
350             local i=
351             for((i=0;i<${#phd_arr[*]};i++)); do
352                 printf "%4d\t%-${PHD_COL_W}s\n" "$(expr $i + 1)" "${phd_arr[$i]}"
353             done
354         else
355             echo_e No data.
356         fi
357     elif [ "$1" == "-s" ]; then
358         show_status $2
359     elif `is_contains "$1" "-d -r -h -k -fk -m -c -R"`; then
360         exec_prg "[email protected]"
361     elif [ "$1" = "-D" ]; then
362         local id=`to_positive_integer "$2"`
363         if [ ! -z "$id" ]&&[ $id -le ${#phd_arr[*]} ]; then
364             local idx=$(expr $id - 1)
365             local tmp_str=
366             local phd=${phd_arr[$idx]}
367             while [ $# -gt 2 ]; do
368                 echo "Checking WAR file. ‘$3‘"
369                 local war_file=`trim "$3"`
370                 local is_ok=false
371                 if [ -z "$war_file" ]; then
372                     echo "Cause: Empty string."
373                 elif [[ "$war_file" == *" "* ]]; then
374                     echo "Cause: Path contains spaces."
375                 elif [ ! -f "$war_file" ]; then
376                     echo "Cause: No such file."
377                 else
378                     local suffix="${war_file##*.}"
379                     if [ "$suffix" != "war" ]; then
380                         echo "Cause: File suffix is not ‘.war‘."
381                     else
382                         local name=`basename "$war_file" .war`
383                         if [ "$name" = "$war_file" ]; then
384                             echo "Cause: Named ‘war/.war‘."
385                         elif `is_contains "$war_file" "..war ...war"`; then
386                             echo "Cause: Named ‘..war/...war‘."
387                         else
388                             local filepath=`to_canonical_path "$war_file"`
389                             unzip -t "$filepath" >/dev/null 2>&1
390                             if [ $? != 0 ]; then
391                                 echo "Cause: Invalid WAR file."
392                             else
393                                 is_ok=true
394                                 if [ -z "$tmp_str" ]; then
395                                     tmp_str="$filepath"
396                                 else
397                                     tmp_str="$tmp_str $filepath"
398                                 fi
399                             fi
400                         fi
401                     fi
402                 fi
403                 if $is_ok; then
404                     echo_n Passed.
405                 else
406                     echo_e Failed.
407                 fi
408                 shift
409             done
410             if [ ! -z "$tmp_str" ]; then
411                 local deployed=false dp_count=0
412                 echo_n "Deploying ($id) ‘$phd‘."
413                 chk_status $idx
414                 if [ $? -eq 1 ]; then
415                     echo_n "Shutting down..."
416                     "$phd/bin/shutdown.sh" >/dev/null 2>&1
417                     sleep 1
418                 fi
419                 chk_status $idx
420                 if [ $? -eq 1 ]; then
421                     echo_n "Kill..."
422                     kill ${PID_ARR[*]} >/dev/null 2>&1
423                     sleep 1
424                 fi
425                 chk_status $idx
426                 if [ $? -ne 0 ]; then
427                     echo_n "Force kill..."
428                     kill -9 ${PID_ARR[*]} >/dev/null 2>&1
429                     sleep 1
430                 fi
431                 chk_status $idx
432                 if [ $? -eq 0 ]; then
433                     local wfp=
434                     for wfp in `echo -e "${tmp_str// /\\n}" | sort -u`; do
435                         local prj_name=`basename "$wfp" .war`
436                         echo_n "Removing file..."
437                         rm -rfv "$phd/webapps/$prj_name"
438                         # cp: ... are the same file
439                         echo_n "Copying file..."
440                         cp -v "$wfp" "$phd/webapps"
441                         let "dp_count+=1"
442                     done
443                     if [ $dp_count != 0 ]; then
444                         echo_n "Starting..."
445                         "$phd/bin/startup.sh" >/dev/null 2>&1
446                         deployed=true
447                     fi
448                 else
449                     echo_e "Unable to end process."
450                 fi
451                 if $deployed; then
452                     echo Deployed projects: $dp_count
453                     print_header
454                     chk_status $idx
455                     printf "%4s\t%11s\t%-${PHD_COL_W}s\n" "$(expr $idx + 1)" "$STATE_LABEL" "${phd_arr[$idx]}"
456                     echo_n "Project deployment has been completed."
457                 else
458                     echo_e "Project deployment is not completed."
459                 fi
460             else
461                 echo_e No files available.
462             fi
463         else
464             local result="`show_status`"
465             echo "$result"
466             if [ `echo "$result" | wc -l` -gt 1 ]; then
467                 echo -e "Examples:\n\t${0##*/} $1 1 mywebapp1.war mywebapp2.war..."
468             fi
469         fi
470     else
471         show_usage
472     fi
473 }
474
475 phd_arr=()
476 main "[email protected]"
477 unset phd_arr
478 #declare
479
480 :<<EOF
481 TODO:
482 is_positive_number()
483 is_positive_integer()
484 is_negative_integer()
485 is_negative_number()
486 is_numeric()
487 is_integer()
488 # greater than 0
489 is_gt0()
490 to_numeric()
491 to_integer()
492 EOF

附件1

原文地址:https://www.cnblogs.com/rms365/p/11219863.html

时间: 2024-10-11 19:56:39

Apache Tomcat Manager 1.0的相关文章

Apache Tomcat 服务因 0 (0x0) 服务性错误而停止

操作系统:Windows Server 2003 SP2/win7 64JDK 版本为 6.0 update 6 安装在 D:\Java 目录下Tomcat 版本为 6.0.16 安装 D:\Tomcat 目录下故障描述:成功安装后 Tomcat 无法启动日志错误:Apache Tomcat 服务因 0 (0x0) 服务性错误而停止解决方法:把 JRE \BIN目录下的 msvcr71.dll 文件拷贝到 C:\windows\system32 下面 注意:64位的操作系统如下操作 解决方法:把

CVE-2014-0050: Exploit with Boundaries, Loops without Boundaries、Apache Commons FileUpload and Apache Tomcat DoS

catalog 1. Description 2. Analysis 3. POC 4. Solution 1. Description MultipartStream.java in Apache Commons FileUpload before 1.3.1, as used in Apache Tomcat, JBoss Web, and other products, allows remote attackers to cause a denial of service (infini

Apache Tomcat 整合集群 session 共享

Apache Tomcat 整合集群 所需软件 CentOS6.5 64 Apache2.2.15 Tomcat7.0.62 JDK 1.8.0_45 tomcat-connectors 1.2.40 MySQL<可选> PHP<可选> 一   安装A服务器安装  IP  192.168.150.7 apache php mysql yum install httpd httpd-devel php php-devel php-gd php-mysql php-mbstring m

Apache Tomcat信息泄露漏洞(CVE-2016-8745)

10.4.62.91   10.4.62.92   10.4.62.93   10.4.62.94 Apache Tomcat信息泄露漏洞(CVE-2016-8745):可通过HTTP获取远端WWW服务信息 发布时间:2016-12-12 重要程度:重要 受影响的版本: Apache Tomcat 9.0.0.m1到9.0.0.m13 Apache Tomcat 8.5.0到8.5.8 更早期版本不受影响 描述: 8.5.x 的 Connector 代码重构引入了一个在 NIO HTTP 连接器

Apache Tomcat 7 安装与配置

下载 首先需要下载tomcat7的安装文件,地址如下: http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.69/bin/apache-tomcat-7.0.69.tar.gz 安装与配置 安装之前需要确保已经安装JDK,若没有安装JDK请参考上一篇blog先正确安装JDK:Linux CentOS 7 & JDK 1.7 安装与配置,如果已经安装JDK,那么就接下来就可以安装tomcat了,首先将下载的安装文件上传到Linux服务器的相应目

Apache Tomcat下载、安装、配置图文教程

想安装一下ArcGIS Server,前提是安装Tomcat. 测试环境: 操作系统名称    Microsoft Windows 8.1 专业版 处理器    Intel(R) Core(TM) i7-4800MQ CPU @ 2.70GHz,2701 Mhz,4 个内核,8 个逻辑处理器 已安装的物理内存(RAM)    8.00 GB tomcat_百度百科 http://baike.baidu.com/link?url=MZj7EXAD_a3M0BimpzQpis_ttO6ovYXlRN

CVE-2019-0232:Apache Tomcat RCE复现

0X00漏洞简介 该漏洞是由于Tomcat CGI将命令行参数传递给Windows程序的方式存在错误,使得CGIServlet被命令注入影响. 该漏洞只影响Windows平台,要求启用了CGIServlet和enableCmdLineArguments参数.但是CGIServlet和enableCmdLineArguments参数默认情况下都不启用. 漏洞影响范围:  Apache Tomcat 9.0.0.M1 to 9.0.17 Apache Tomcat 8.5.0 to 8.5.39  

Target runtime Apache Tomcat v6.0 is not defined. phyy Unknown Faceted Project Problem

Description Resource Path Location TypeTarget runtime Apache Tomcat v6.0 is not defined. phyy Unknown Faceted Project Problem 找到工程.settings目录 修改注释部分即可 <?xml version="1.0" encoding="UTF-8"?> <faceted-project> <!-- <run

构建Apache Tomcat 6.0 Servlet/JSP 容器

构建Apache Tomcat 6.0 Servlet/JSP 容器 这个子项目包含了Tomcat 6.0的源代码,一个实现了Java Community Process http://www.jcp.org/ 的Servlet2.5和JSP2.1标准的容器. 注意:如果你只需要运行Tomcat,没有必要去构建它,你可以非常方便的下载一个二进制发布包.它是跨平台的.阅读RUNNING.txt文件,它介绍了怎样去运行它. 请按以下步骤来从源代码构建一个Tomcat的二进制发布版本: 下载并安装JD