Apache Tomcat Manager 2.0
Abbr. atm
Suitable for:
Apache Tomcat 7.0.47
96CEA91ACF2F9255AE9D161B420612FA atm
0856F3886B6CF0527E792ABE9764EF1A atm.ini
995F95A21622CFE94B3D6DDE00A25F19 atm.log
默认会排序,可以通过执行多条命令来抑制,如:
atm -m 2; atm -m 3; atm -m 1
新增:WHEN/stopwatch/-v
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 # Pause for NUMBER seconds. (e.g., 15/5/3) 4 WHEN_KILL=0.3 5 WHEN_FORCE_KILL=0.2 6 WHEN_REVIEW=0.1 7 #EOF
atm.log
1 Lap Begin End Duration Duration (HRF) Message 2 1 13:44:19.496921725 13:44:19.507952040 0.011030315 00:00:00.011030315 Deal with 'ccms'. 3 2 13:44:19.507952040 13:44:19.542371298 0.034419258 00:00:00.034419258 Remove file. 4 3 13:44:19.542371298 13:44:19.647810494 0.105439196 00:00:00.105439196 Copy file. 5 4 13:44:19.647810494 13:44:19.656263875 0.008453381 00:00:00.008453381 Deal with 'df-1'. 6 5 13:44:19.656263875 13:44:19.682079662 0.025815787 00:00:00.025815787 Remove file. 7 6 13:44:19.682079662 13:44:19.786467747 0.104388085 00:00:00.104388085 Copy file. 8 7 13:44:19.786467747 13:44:19.794942150 0.008474403 00:00:00.008474403 Deal with 'df-2'. 9 8 13:44:19.794942150 13:44:19.820843004 0.025900854 00:00:00.025900854 Remove file. 10 9 13:44:19.820843004 13:44:19.926616600 0.105773596 00:00:00.105773596 Copy file. 11 10 13:44:19.926616600 13:44:19.985710578 0.059093978 00:00:00.059093978 Starting '/opt/data/devel/apache-tomcat-7.0.47/p80'. 12 11 13:44:19.985710578 13:44:20.002478496 0.012589872 00:00:00.012589872 * Last lap 13 \ 13:44:19.994237292 13:44:19.998415338 0.004178046 00:00:00.004178046 'Deploy' -> 'completed' 14 Total: 0.016767918 00:00:00.016767918 15 ----------------------------------------------------------------------------- 16 Summary: 0.505556771 00:00:00.505556771
atm
1 #!/bin/sh 2 3 echo_n(){ 4 echo -e "\033[30;32m$*\033[0m" 5 } 6 7 echo_e(){ 8 echo -e "\033[30;35m$*\033[0m" 9 } 10 11 trim(){ 12 echo $1 13 } 14 15 is_contains(){ 16 local ps= 17 for ps in $2; do 18 if [ "$ps" = "$1" ]; then 19 echo true 20 return 1 21 fi 22 done 23 echo false 24 } 25 26 chk_positive_integer(){ 27 POS_INT= 28 local nstr=`trim "$1"` 29 echo "$nstr" | grep "[^0-9]" >/dev/null 2>&1 30 if [ $? -eq 1 ]&&[ ! -z "$nstr" ]; then 31 local t=$(expr $nstr + 0) 32 if (( $t > 0 )); then 33 POS_INT=$t 34 return 1 35 fi 36 fi 37 } 38 39 to_positive_integer(){ 40 chk_positive_integer "$1" 41 echo $POS_INT 42 } 43 44 one_slash(){ 45 local str="$1" 46 while [[ "$src" == *//* ]]; do 47 local regex="//" repl="/" 48 str="${str//$regex/$repl}" 49 done 50 echo $str 51 } 52 53 to_canonical_path(){ 54 local path=`trim "$1"` 55 if [ ! -z "$path" ]&&[ -e "$path" ]; then 56 local result= 57 if [ -d "$path" ]; then 58 result=`cd "$path"; pwd` 59 elif [ -f "$path" ]; then 60 local directory=`dirname "$path"` 61 directory=`cd "$directory"; pwd` 62 local filename=`basename "$path"` 63 result="$directory/$filename" 64 fi 65 result=`one_slash "$result"` 66 echo $result 67 fi 68 } 69 70 display_time_its(){ 71 local internal_time_stamp="$1" format="$2" utc="$3" 72 if [ ! -z "$internal_time_stamp" ]; then 73 if [ "$format" = "" ]; then 74 format="+%Y%m%d_%H%M%S_%N" 75 elif [ "$format" = "datetime" ]; then 76 format="+%Y%m%d%H%M%S" 77 elif [ "$format" = "clock" ]; then 78 format="+%F %T" 79 elif [ "$format" = "date" ]; then 80 format="+%Y%m%d" 81 elif [ "$format" = "date-" ]; then 82 format="+%F" 83 elif [ "$format" = "time" ]; then 84 format="+%H%M%S" 85 elif [ "$format" = "time:" ]; then 86 format="+%T" 87 elif [ "$format" = "time:.ns" ]; then 88 format="+%T.%N" 89 elif [ "$format" = "clock.ns" ]; then 90 format="+%F %T.%N" 91 elif [ "$format" = "table" ]; then 92 format="+%F%t%T%t%N" 93 fi 94 if [ -z "$utc" ]; then 95 date -d @$internal_time_stamp "$format" 96 else 97 date -u -d @$internal_time_stamp "$format" 98 fi 99 fi 100 } 101 102 stopwatch(){ 103 local cmd="$1" msg="$2" 104 if [ "$cmd" = "start" ]; then 105 if [ "$sw_state" = "" ]; then 106 unset sw_state sw_ref_arr sw_lap_begin sw_lap_end sw_lap_arr sw_pause_begin sw_pause_end sw_pause_arr sw_msg_idx sw_lap_msg_arr sw_pause_msg_idx sw_pause_msg_arr 107 sw_lap_begin="`date +%s.%N`" 108 sw_state="R" 109 sw_lap_msg_idx=0 110 sw_pause_msg_idx=0 111 sw_pause_msg_arr[$sw_pause_msg_idx]="$msg" 112 elif [ "$sw_state" = "H" ]; then 113 sw_pause_end="`date +%s.%N`" 114 sw_pause_arr[${#sw_pause_arr[*]}]="$sw_pause_begin-$sw_pause_end" 115 sw_pause_msg_arr[$sw_pause_msg_idx]="$msg" 116 sw_state="R" 117 else 118 echo_e "(Start) requires the state to be ''/'H'." 119 fi 120 elif [ "$cmd" = "lap" ]; then 121 if [ "$sw_state" = "R" ]; then 122 sw_lap_end="`date +%s.%N`" 123 sw_lap_arr[${#sw_lap_arr[*]}]="$sw_lap_begin $sw_lap_end" 124 sw_lap_begin="$sw_lap_end" 125 sw_ref_arr[$(expr ${#sw_lap_arr[*]} - 1)]=${sw_pause_arr[*]} 126 sw_pause_arr=() 127 sw_lap_msg_arr[$sw_lap_msg_idx]="$msg" 128 let "sw_lap_msg_idx+=1" 129 else 130 echo_e "(Lap) requires the state to be 'R'." 131 fi 132 elif [ "$cmd" = "stop" ]; then 133 if [ "$sw_state" = "R" ]; then 134 sw_pause_begin="`date +%s.%N`" 135 sw_pause_msg_arr[$sw_pause_msg_idx]="'${sw_pause_msg_arr[$sw_pause_msg_idx]}' -> '$msg'" 136 let "sw_pause_msg_idx+=1" 137 sw_state="H" 138 else 139 echo_e "(Stop) requires the state to be 'R'." 140 fi 141 elif [ "$cmd" = "reset" ]; then 142 if [ "$sw_state" = "H" ]; then 143 stopwatch start "* Last start" 144 stopwatch lap "* Last lap" 145 stopwatch stop "* Last stop" 146 sw_state= 147 else 148 echo_e "(Reset) requires the state to be 'H'." 149 fi 150 else 151 if [ ! "$sw_state" = "" ]; then 152 echo_e "(*) requires the state to be ''." 153 elif [ ${#sw_lap_arr[*]} != 0 ]; then 154 printf "%4s %18s %18s %15s %18s %s\n" "Lap" "Begin" "End" "Duration" "Duration (HRF)" "Message" 155 local i= summary_exp=0 pause_msg_idx=0 lap_msg_idx=0 156 for((i=0;i<${#sw_lap_arr[*]};i++)); do 157 local lap_item=(${sw_lap_arr[$i]}) 158 local lap_dur_exp="${lap_item[1]} - ${lap_item[0]}" 159 local total_duration="`echo "$lap_dur_exp" | bc | awk '{ printf "%.9f\n", $1 }'`" 160 local pause_arr=(${sw_ref_arr[$i]}) 161 local pause_dur_arr=() 162 local j= 163 for((j=0;j<${#pause_arr[*]};j++)); do 164 local pause_item="${pause_arr[$j]}" 165 pause_item=(${pause_item//-/ }) 166 pause_dur_arr[j]="`echo "${pause_item[1]} - ${pause_item[0]}" | bc | awk '{ printf "%.9f\n", $1 }'`" 167 lap_dur_exp="$lap_dur_exp - ${pause_dur_arr[j]}" 168 done 169 local real_duration="`echo "$lap_dur_exp" | bc | awk '{ printf "%.9f\n", $1 }'`" 170 printf "%4s %18s %18s %15s %18s %s\n" "$(expr $i + 1)" \ 171 "`display_time_its ${lap_item[0]} time:.ns`" \ 172 "`display_time_its ${lap_item[1]} time:.ns`" \ 173 "$real_duration" \ 174 "`display_time_its $real_duration time:.ns *`" \ 175 "${sw_lap_msg_arr[$lap_msg_idx]}" 176 let "lap_msg_idx+=1" 177 for((j=0;j<${#pause_arr[*]};j++)); do 178 local pause_item="${pause_arr[$j]}" 179 pause_item=(${pause_item//-/ }) 180 printf "%4s %18s %18s %15s %18s %s\n" "\\" \ 181 "`display_time_its ${pause_item[0]} time:.ns`" \ 182 "`display_time_its ${pause_item[1]} time:.ns`" \ 183 "${pause_dur_arr[j]}" \ 184 "`display_time_its ${pause_dur_arr[j]} time:.ns *`" \ 185 "${sw_pause_msg_arr[$pause_msg_idx]}" 186 let "pause_msg_idx+=1" 187 done 188 if [ $j != 0 ]; then 189 printf "%42s %15s %18s\n" "Total:" "$total_duration" "`display_time_its $total_duration time:.ns *`" 190 summary_exp="$summary_exp + $total_duration" 191 else 192 summary_exp="$summary_exp + $real_duration" 193 fi 194 done 195 local m=0 196 while((m < 77)); do 197 printf "%s" "-" 198 let "m+=1" 199 done 200 printf "\n" 201 local summary_val="`echo "$summary_exp" | bc | awk '{ printf "%.9f\n", $1 }'`" 202 printf "%42s %15s %18s\n" "Summary:" "$summary_val" "`display_time_its $summary_val time:.ns *`" 203 else 204 echo_e No data. 205 fi 206 fi 207 } 208 209 show_usage(){ 210 echo 211 echo_n "Apache Tomcat Manager 1.0" 212 echo_n "Report bugs to <614616185@qq.com>." 213 echo 214 echo "Usage: ${0##*/} [OPTION]..." 215 printf "\t%-8s%s\n" "-g" "Generate optimal 'PRG_HOME_DIRS'." 216 printf "\t%-8s%s\n" "-l" "List program home directories." 217 printf "\t%-8s%s\n" "-s" "Query program state." 218 printf "\t\t%-8s%s\n" "-h" "State is 'Halted'." 219 printf "\t\t%-8s%s\n" "-r" "State is 'Running'." 220 printf "\t\t%-8s%s\n" "-a" "State is 'Abnormal'." 221 printf "\t\t%-8s%s\n" "-ra" "State is 'Running' or 'Abnormal'." 222 printf "\t%-8s%s\n" "-d" "Diagnosing program state." 223 printf "\t%-8s%s\n" "-r" "Run program." 224 printf "\t%-8s%s\n" "-h" "Halt program." 225 printf "\t%-8s%s\n" "-k" "Kill program." 226 printf "\t%-8s%s\n" "-fk" "Force kill program." 227 printf "\t%-8s%s\n" "-m" "Monitoring log (Ctrl+\)." 228 printf "\t%-8s%s\n" "-c" "Clean up the cache and garbage." 229 printf "\t%-8s%s\n" "-R" "Rerun program." 230 printf "\t%-8s%s\n" "-D" "Deploy web application archive." 231 printf "\t%-8s%s\n" "-v" "View recent executions." 232 echo 233 } 234 235 chk_widest(){ 236 local i= max=0 arr=($1) 237 for((i=0;i<${#arr[*]};i++)); do 238 if [ ${#arr[$i]} -gt $max ]; then 239 max=${#arr[$i]} 240 fi 241 done 242 WIDEST=$max 243 } 244 245 is_prg_id(){ 246 if (( $phd_len > 0 )) && (( $1 >= 0 )) && (( $1 < $phd_len )); then 247 echo true 248 else 249 echo false 250 fi 251 } 252 253 chk_process(){ 254 pid_arr=() pid_str= pid_len=0 255 local prg_path="${phd_arr[$1]}" 256 if [ ! -z "$prg_path" ]; then 257 local java_pids="`ps --no-heading -o pid -C java`" 258 java_pids=`echo $java_pids` 259 if [ ! -z "$java_pids" ]; then 260 local prg_pids=`ps --no-heading -o pid,cmd -p $java_pids | grep $prg_path | awk '{ print $1 }'` 261 pid_str=`echo $prg_pids` 262 pid_arr=($pid_str) 263 pid_len=${#pid_arr[*]} 264 fi 265 fi 266 } 267 268 chk_status(){ 269 local rtn=0 arr=("Not running" "OK" "Abnormal") 270 chk_process $1 271 rtn=$pid_len 272 if [ $pid_len -gt 1 ]; then 273 rtn=2 274 fi 275 STATE_LABEL=${arr[$rtn]} 276 return $rtn 277 } 278 279 print_header(){ 280 printf "%4s\t%11s\t%${PHD_COL_W}s\n" "ID" "State" "Program Home Directory" 281 } 282 283 show_status(){ 284 if [ -z "$1" ]||`is_contains "$1" "-h -r -a -ra"`; then 285 local i= t_body= 286 for((i=0;i<$phd_len;i++)); do 287 chk_status $i 288 local rtn=$? 289 if [ -z "$1" ] || [[ "$1" = "-h" && (( $rtn == 0 )) ]] || [[ "$1" = "-r" && (( $rtn == 1 )) ]] || [[ "$1" = "-a" && (( $rtn == 2 )) ]] || [[ "$1" = "-ra" && (( $rtn != 0 )) ]]; then 290 local t_tr=`printf "%4s\t%11s\t%-${PHD_COL_W}s\n" "$(expr $i + 1)" "$STATE_LABEL" "${phd_arr[$i]}"` 291 if [ -z "$t_body" ]; then 292 t_body="$t_tr\n" 293 else 294 t_body="$t_body$t_tr\n" 295 fi 296 fi 297 done 298 if [ -z "$t_body" ]; then 299 echo_e No data. 300 else 301 print_header 302 echo -e "$t_body" 303 fi 304 else 305 show_usage 306 exit 307 fi 308 } 309 310 exec_prg(){ 311 #local p 312 #for p in "$@"; do 313 # echo [$p] 314 #done 315 local state_filter= 316 if `is_contains "$1" "-r -c"`; then 317 state_filter="-h" 318 elif `is_contains "$1" "-h -m"`; then 319 state_filter="-r" 320 elif `is_contains "$1" "-d -k -fk"`; then 321 state_filter="-ra" 322 fi 323 if [ $# -eq 1 ]; then 324 local result="`show_status $state_filter`" 325 echo "$result" 326 if [ `echo "$result" | wc -l` -gt 1 ]; then 327 echo -e "Examples:\n\t${0##*/} $1 8 4 2 1..." 328 fi 329 else 330 local opt1=$1 tmp_str= 331 while [ $# -gt 1 ]; do 332 local tpi=`to_positive_integer "$2"` 333 if [ ! -z "$tpi" ]&&[ $tpi -le $phd_len ]; then 334 if [ -z "$tmp_str" ]; then 335 tmp_str=$tpi 336 else 337 tmp_str="$tmp_str $tpi" 338 fi 339 fi 340 shift 341 done 342 local id= idx= executed_idxs= diagnose_header=true 343 for id in `echo -e "${tmp_str// /\\n}" | sort -nu`; do 344 idx=$(expr $id - 1) 345 if `is_prg_id $idx`; then 346 chk_status $idx 347 local rtn=$? 348 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 349 local cmd= 350 local phd=${phd_arr[$idx]} 351 if [ "$opt1" = "-r" ]; then 352 echo_n "Run ($id) '$phd'." 353 cmd="$phd/bin/startup.sh" 354 elif [ "$opt1" = "-h" ]; then 355 echo_n "Halt ($id) '$phd'." 356 cmd="$phd/bin/shutdown.sh" 357 elif [ "$opt1" = "-m" ]; then 358 echo_n "Monitoring ($id) '$phd'." 359 pushd $phd/logs >/dev/null 2>&1 360 tail -f catalina.out 361 popd >/dev/null 2>&1 362 elif [ "$opt1" = "-c" ]; then 363 echo_n "Clean up ($id) '$phd'." 364 echo -e "\t--> logs" 365 pushd $phd/logs >/dev/null 2>&1 366 rm -rfv * 367 popd >/dev/null 2>&1 368 echo -e "\t--> work" 369 pushd $phd/work >/dev/null 2>&1 370 rm -rfv * 371 popd >/dev/null 2>&1 372 elif [ "$opt1" = "-R" ]; then 373 echo_n "Rerun ($id) '$phd'." 374 if [ $rtn -eq 1 ]; then 375 echo_n "Shutting down..." 376 "$phd/bin/shutdown.sh" >/dev/null 2>&1 377 if [ ! -z "$WHEN_KILL" ]; then 378 echo "Please wait $WHEN_KILL seconds." 379 sleep $WHEN_KILL 380 fi 381 fi 382 chk_status $idx 383 if [ $? -eq 1 ]; then 384 echo_n "Kill..." 385 kill $pid_str >/dev/null 2>&1 386 if [ ! -z "$WHEN_FORCE_KILL" ]; then 387 echo "Please wait $WHEN_FORCE_KILL seconds." 388 sleep $WHEN_FORCE_KILL 389 fi 390 fi 391 chk_status $idx 392 if [ $? -ne 0 ]; then 393 echo_n "Force kill..." 394 kill -9 $pid_str >/dev/null 2>&1 395 sleep 1 396 fi 397 chk_status $idx 398 if [ $? -eq 0 ]; then 399 echo_n "Starting..." 400 cmd="$phd/bin/startup.sh" 401 else 402 echo_e "Unable to end process." 403 fi 404 elif [ "$opt1" = "-d" ]; then 405 if $diagnose_header; then 406 printf "%4s\t%5s\t%11s\t%${PHD_COL_W}s\n" "ID" "PID" "State" "Program Home Directory" 407 diagnose_header=false 408 fi 409 local d_pid= 410 for d_pid in $pid_str; do 411 printf "%4s\t%5s\t%11s\t%-${PHD_COL_W}s\n" "$id" "$d_pid" "$STATE_LABEL" "$phd" 412 done 413 elif [ "$opt1" = "-k" ]; then 414 echo_n "Kill ($id) '$phd'." 415 cmd="kill $pid_str" 416 elif [ "$opt1" = "-fk" ]; then 417 echo_n "Force kill ($id) '$phd'." 418 cmd="kill -9 $pid_str" 419 fi 420 if [ ! -z "$cmd" ]; then 421 `$cmd >/dev/null 2>&1` 422 fi 423 if [ -z "$executed_idxs" ]; then 424 executed_idxs=$idx 425 else 426 executed_idxs="$executed_idxs $idx" 427 fi 428 fi 429 fi 430 done 431 if [ ! -z "$executed_idxs" ]; then 432 if `is_contains "$opt1" "-r -h -k -fk -R"`; then 433 if [ ! -z "$WHEN_REVIEW" ]; then 434 echo "Please wait $WHEN_REVIEW seconds." 435 sleep $WHEN_REVIEW 436 fi 437 print_header 438 local idx= 439 for idx in $executed_idxs; do 440 chk_status $idx 441 printf "%4s\t%11s\t%-${PHD_COL_W}s\n" "$(expr $idx + 1)" "$STATE_LABEL" "${phd_arr[$idx]}" 442 done 443 echo_n "The command completed successfully." 444 fi 445 else 446 echo_e Nothing to do. 447 fi 448 fi 449 } 450 451 main(){ 452 # Show usage 453 if [ -z "$1" ]; then 454 show_usage 455 exit 456 fi 457 458 # Read configuration file 459 local line= 460 while read line; do 461 eval "$line" 462 done < ${0%%.*}.ini 463 464 # Filling phd_arr 465 local phd= 466 for phd in `echo -e "${PRG_HOME_DIRS//:/\\n}" | sort -u`; do 467 phd=`to_canonical_path "$phd"` 468 if [ ! -z "$phd" ]&&[ -x "$phd/bin/startup.sh" ]&&[ -x "$phd/bin/shutdown.sh" ]&&[ -d "$phd/webapps" ]&&[ -d "$phd/work" ]&&[ -d "$phd/logs" ]; then 469 phd_arr[${#phd_arr[*]}]="$phd" 470 fi 471 done 472 473 local tmp_str="${phd_arr[*]}" 474 tmp_str=`echo -e "${tmp_str// /\\n}" | sort -u` 475 phd_arr=($tmp_str) 476 phd_str="${phd_arr[*]}" 477 phd_len=${#phd_arr[*]} 478 479 # Check the quantity 480 local max_phds=99 481 if [ $phd_len -gt $max_phds ]; then 482 echo_e "Error: 'PRG_HOME_DIRS' exceeds $max_phds." 483 exit 484 fi 485 486 # Initialize the maximum width of the column 487 chk_widest "$phd_str" 488 PHD_COL_W=$WIDEST 489 490 # Parameter matching 491 if [ "$1" == "-g" ]; then 492 echo -e "PRG_HOME_DIRS=${phd_str// /:}" 493 elif [ "$1" == "-l" ]; then 494 if [ $phd_len -gt 0 ]; then 495 printf "%4s\t%${PHD_COL_W}s\n" "ID" "Program Home Directory" 496 local i= 497 for((i=0;i<$phd_len;i++)); do 498 printf "%4d\t%-${PHD_COL_W}s\n" "$(expr $i + 1)" "${phd_arr[$i]}" 499 done 500 else 501 echo_e No data. 502 fi 503 elif [ "$1" == "-v" ]; then 504 local log=${0%%.*}.log 505 if [ -f "$log" ]; then 506 which vi >/dev/null 2>&1 507 if [ $? != 0 ]; then 508 more "$log" 509 else 510 vi -M "$log" 511 fi 512 else 513 echo_e No data. 514 fi 515 elif [ "$1" == "-s" ]; then 516 show_status $2 517 elif `is_contains "$1" "-d -r -h -k -fk -m -c -R"`; then 518 exec_prg "$@" 519 elif [ "$1" = "-D" ]; then 520 local id=`to_positive_integer "$2"` 521 if [ ! -z "$id" ]&&[ $id -le $phd_len ]; then 522 local idx=$(expr $id - 1) 523 local tmp_str= 524 local phd=${phd_arr[$idx]} 525 while [ $# -gt 2 ]; do 526 echo "Checking WAR file. '$3'" 527 local war_file=`trim "$3"` 528 local is_ok=false 529 if [ -z "$war_file" ]; then 530 echo "Cause: Empty string." 531 elif [[ "$war_file" == *" "* ]]; then 532 echo "Cause: Path contains spaces." 533 elif [ ! -f "$war_file" ]; then 534 echo "Cause: No such file." 535 else 536 local suffix="${war_file##*.}" 537 if [ "$suffix" != "war" ]; then 538 echo "Cause: File suffix is not '.war'." 539 else 540 local name=`basename "$war_file" .war` 541 if [ "$name" = "$war_file" ]; then 542 echo "Cause: Named 'war/.war'." 543 elif `is_contains "$war_file" "..war ...war"`; then 544 echo "Cause: Named '..war/...war'." 545 else 546 local filepath=`to_canonical_path "$war_file"` 547 unzip -t "$filepath" >/dev/null 2>&1 548 if [ $? != 0 ]; then 549 echo "Cause: Invalid WAR file." 550 else 551 is_ok=true 552 if [ -z "$tmp_str" ]; then 553 tmp_str="$filepath" 554 else 555 tmp_str="$tmp_str $filepath" 556 fi 557 fi 558 fi 559 fi 560 fi 561 if $is_ok; then 562 echo_n Passed. 563 else 564 echo_e Failed. 565 fi 566 shift 567 done 568 if [ ! -z "$tmp_str" ]; then 569 local deployed=false dp_count=0 570 echo_n "Deploying ($id) '$phd'." 571 chk_status $idx 572 if [ $? -eq 1 ]; then 573 echo_n "Shutting down..." 574 "$phd/bin/shutdown.sh" >/dev/null 2>&1 575 if [ ! -z "$WHEN_KILL" ]; then 576 echo "Please wait $WHEN_KILL seconds." 577 sleep $WHEN_KILL 578 fi 579 fi 580 chk_status $idx 581 if [ $? -eq 1 ]; then 582 echo_n "Kill..." 583 kill $pid_str >/dev/null 2>&1 584 if [ ! -z "$WHEN_FORCE_KILL" ]; then 585 echo "Please wait $WHEN_FORCE_KILL seconds." 586 sleep $WHEN_FORCE_KILL 587 fi 588 fi 589 chk_status $idx 590 if [ $? -ne 0 ]; then 591 echo_n "Force kill..." 592 kill -9 $pid_str >/dev/null 2>&1 593 sleep 1 594 fi 595 chk_status $idx 596 if [ $? -eq 0 ]; then 597 local wfp= 598 stopwatch start "Deploy" 599 for wfp in `echo -e "${tmp_str// /\\n}" | sort -u`; do 600 local prj_name=`basename "$wfp" .war` 601 stopwatch lap "Deal with '$prj_name'." 602 echo_n "Removing file..." 603 rm -rfv "$phd/webapps/$prj_name" 604 stopwatch lap "Remove file." 605 # cp: ... are the same file 606 echo_n "Copying file..." 607 cp -v "$wfp" "$phd/webapps" 608 stopwatch lap "Copy file." 609 let "dp_count+=1" 610 done 611 if [ $dp_count != 0 ]; then 612 echo_n "Starting..." 613 "$phd/bin/startup.sh" >/dev/null 2>&1 614 stopwatch lap "Starting '$phd'." 615 deployed=true 616 fi 617 stopwatch stop "completed" 618 stopwatch reset 619 stopwatch > ${0%%.*}.log 620 else 621 echo_e "Unable to end process." 622 fi 623 if $deployed; then 624 echo Deployed projects: $dp_count 625 if [ ! -z "$WHEN_REVIEW" ]; then 626 echo "Please wait $WHEN_REVIEW seconds." 627 sleep $WHEN_REVIEW 628 fi 629 print_header 630 chk_status $idx 631 printf "%4s\t%11s\t%-${PHD_COL_W}s\n" "$(expr $idx + 1)" "$STATE_LABEL" "${phd_arr[$idx]}" 632 echo_n "Project deployment has been completed." 633 else 634 echo_e "Project deployment is not completed." 635 fi 636 else 637 echo_e No files available. 638 fi 639 else 640 local result="`show_status`" 641 echo "$result" 642 if [ `echo "$result" | wc -l` -gt 1 ]; then 643 echo -e "Examples:\n\t${0##*/} $1 1 mywebapp1.war mywebapp2.war..." 644 fi 645 fi 646 else 647 show_usage 648 fi 649 } 650 651 phd_arr=() phd_str= phd_len=0 652 pid_arr=() pid_str= pid_len=0 653 main "$@" 654 unset phd_arr phd_str phd_len 655 unset pid_arr pid_str pid_len 656 #declare 657 658 :<<EOF 659 TODO: 660 is_positive_number() 661 is_positive_integer() 662 is_negative_integer() 663 is_negative_number() 664 is_numeric() 665 is_integer() 666 # greater than 0 667 is_gt0() 668 to_numeric() 669 to_integer() 670 EOF