[jboss-user] [Installation, Configuration & Deployment] - JBoss restart script

davidrabinowitz do-not-reply at jboss.com
Sun Aug 23 02:54:08 EDT 2009


When we restart the script there are two problems under heavy load:

It takes JBoss long time to come down, or it won't shut down at all
After restarting there are still sockets connected to the AJP port, preventing the JBoss to bind to this port (my guess, as waiting for these sockets to close solves the problem.

I've written the following script in order to restart the jboss. My problem is that even if the scripts waits enough time to have all the sockets to be closed by the OS the start fails. If I kill the script and run it again, it starts the jboss perfectly.

I'd appreciate any fixes to the script.
#!/bin/sh
  | 
  | KILLWAIT=15
  | JBOSSPORT=8009
  | JBOSS_DIR=$(grep jbossas /etc/passwd | tr ':' ' ' | awk '{print $6}')/server/default
  | HYPERIC_TIMEOUT=180s
  | 
  | jboss_pids() {
  | ps aux | grep java|grep jboss.Main | grep Xmx | awk '{print $2}'| tr '\n' ' ' 
  | }
  | 
  | jbossctl() {
  | sudo /sbin/service jbossas $1
  | }
  | 
  | kill_jboss() {
  | jboss_pids | sudo xargs kill $1
  | }
  | 
  | count_open_sockets() {
  | sudo netstat -alnp 2>/dev/null|grep tcp | awk '{print $4,$5}' | grep :$1 | wc -l
  | }
  | 
  | get_process_listening_on() {
  | sudo netstat -alnp | grep $1 | grep LISTEN|awk '{print $7}' | sed -r 's/([0-9]+)\/.*/\1/g'
  | }
  | 
  | message() {
  | echo ""
  | echo "=========================================================="
  | echo "$1"
  | echo "=========================================================="
  | echo "" 
  | }
  | 
  | wait_for_death_of_sockets_of_port() {
  | echo "waiting for port $1 to die"
  | SEC=1
  | SOCKNUM=$(count_open_sockets $1)
  | while [ $SOCKNUM -ne 0 ];
  | do
  |         sleep 1
  |         echo "waiting for ${SEC} seconds on port $1, number of sockets is ${SOCKNUM}"
  |         SEC=`expr $SEC + 1`
  |         SOCKNUM=$(count_open_sockets $1)
  | done
  | echo "No more sockets for port $1"
  | echo ""
  | }
  | 
  | reset_jboss_env() {
  | echo "Copying log files"
  | for LOG in $(echo ${JBOSS_DIR}/log/*.log) 
  | do
  |   sudo mv ${LOG} ${LOG}.${DATETIME}
  | done
  | 
  | # delete jboss work tmp data folders
  | echo "Deleting jboss work tmp data folders"
  | sudo rm -fr ${JBOSS_DIR}/work 
  | sudo rm -fr ${JBOSS_DIR}/tmp 
  | sudo rm -fr ${JBOSS_DIR}/data
  | }
  | 
  | restart_hyperic_if_needed() {
  | sleep ${HYPERIC_TIMEOUT}
  | HYPERICPID=$(ps aux | grep hyperic | grep java | grep Xmx | awk '{print $2}' | tr '\n' ' ')
  | if [ "x$HYPERICPID" = "x" ]; then 
  |     # No hyperic is running
  |         sudo /opt/hyperic/hyperic-hq-agent/bin/hq-agent.sh start
  | fi
  | }
  | 
  | #
  | # Main
  | #
  | 
  | # activat sudo
  | sudo whoami > /dev/null
  | 
  | 
  | 
  | message "stopping jboss"
  | jbossctl stop &
  | sleep 1
  | echo ""
  | 
  | # waiting
  | JBOSSPID=$(jboss_pids)
  | SEC=1
  | while [ "x$JBOSSPID" != "x" ] && [ $SEC -le $KILLWAIT ];
  | do
  |         sleep 1
  |         echo "waiting ($SEC)"
  |         SEC=`expr $SEC + 1`
  |         JBOSSPID=$(jboss_pids)
  | done
  | 
  | # killing jboss
  | JBOSSPID=$(jboss_pids)
  | if [ "x$JBOSSPID" != "x" ];
  | then
  |         message "Jboss is still alive, trying to kill it"
  |         kill_jboss -9
  | fi
  | 
  | # wait for sockets
  | wait_for_death_of_sockets_of_port $JBOSSPORT
  | 
  | # check if hyperic listens on 8080
  | HYPERICPID=$(get_process_listening_on 8080)
  | if [ "x$HYPERICPID" != "x" ]; then
  |     messgae "killing Hyperic"
  |         sudo kill -9 $HYPERICPID
  | fi
  | 
  | wait_for_death_of_sockets_of_port 8080
  | 
  | reset_jboss_env
  | 
  | sudo netstat -alnp | grep LISTEN | grep tcp
  | 
  | message "Stating Jboss"
  | sleep 5s
  | jbossctl start &
  | 
  | sleep 10s
  | message "please follow log, run 'tail -f /var/log/jbossas/default/server-$(hostname).log'"
  | 
  | restart_hyperic_if_needed &

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4251015#4251015

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4251015



More information about the jboss-user mailing list