列宿乃施于上榮兮 日月才經(jīng)于柍桭

          ………… 白駒過隙 歲月如斯 夢縈回繞 心靈之聲
          posts - 57, comments - 8, trackbacks - 0, articles - 41
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Linux下Shell腳本完善

          Posted on 2010-10-11 20:17 默認為零 閱讀(561) 評論(0)  編輯  收藏 所屬分類: 技術(shù)

          服務器上重啟應用時經(jīng)常在shutdown jboss階段卡死等待,但是單獨手工執(zhí)行jboss shutdown.sh都是正常的。感覺還是調(diào)用shutdown.sh的腳本出了問題,遂仔細分析下shell編寫的相關(guān)起停腳本,還是發(fā)現(xiàn)一點小問題的。其中封裝的stop腳本如下:

          stop()
          {
              jboss_jndi_port=1099
              STR=`ps -C java -f --width 2000 | grep " $CUSTOM_PATH"`
                  echo "$CUSTOM_PATH"
                  echo "$STDOUT_LOG"
                  echo "$STR"
              if [ ! -z "$STR" ]; then
                  while !(`grep "Halting VM" $STDOUT_LOG >/dev/null`)
                  do
                          sh $JBOSS_HOME/bin/shutdown.sh --server=localhost:1099 -S > /dev/null 2>&1
                          echo -e "* \c"
                          sleep 5
                  done
                  echo "JBoss已經(jīng)關(guān)閉"
              else    
                  echo "沒有Java進程"
              fi
             
              $BASE_HOME/bin/apachectl stop
             
              JBOSS_CLASSPATH=""
              export JBOSS_CLASSPATH
          }
          意思是這樣的:
          1、首先通過$CUSTOM_PATH這個變量代表的字符串過濾出jboss進程,賦值為$STR。
          2、$STR不為空,則循環(huán)判斷jboss啟停日志中是否出現(xiàn)“Halting VM”,未出現(xiàn)則執(zhí)行jboss shutdown.sh,然后等待5秒后再次判斷,如果還未出現(xiàn)則再次啟動shutdown.sh。直到日志“Halting VM”出現(xiàn)后邏輯繼續(xù)往下走,echo "JBoss已經(jīng)關(guān)閉"等等。

          這樣看來,邏輯應該有點問題。假如5秒內(nèi)jboss沒有shutdown完畢,java進程還在的情況下,重復執(zhí)行jboss shutdown.sh是有問題的,這或許就是停止jboss服務過程中卡死等待的真正原因,于是著手修改腳本:
          stop()
          {
              jboss_jndi_port=1099
              STR=`ps -C java -f --width 2000 | grep " $CUSTOM_PATH"`
                  echo "$CUSTOM_PATH"
                  echo "$STDOUT_LOG"
                  echo "$STR"
              if [ ! -z "$STR" ]; then
                  sh $JBOSS_HOME/bin/shutdown.sh --server=localhost:1099 -S > /dev/null 2>&1
                  while !(`grep "Halting VM" $STDOUT_LOG >/dev/null`)
                  do
                          echo -e "* \c"
                          sleep 5
                  done
                  echo "JBoss已經(jīng)關(guān)閉"
              else    
                  echo "沒有Java進程"
              fi
             
              $BASE_HOME/bin/apachectl stop
             
              JBOSS_CLASSPATH=""
              export JBOSS_CLASSPATH
          }
          判斷jboss進程存在,則調(diào)用jboss shutdown正常卸載其服務,每隔5秒判斷一次卸載是否完成。沒完成繼續(xù)等待,反之邏輯繼續(xù)。

          完了測試,經(jīng)過多次啟停腳本測試后,沒有再現(xiàn)以前的問題,解決問題!

          主站蜘蛛池模板: 和平县| 邹城市| 昭通市| 阿巴嘎旗| 呼和浩特市| 徐州市| 苏州市| 桂阳县| 江北区| 如皋市| 孟津县| 富裕县| 丹阳市| 灯塔市| 根河市| 崇信县| 清水县| 左贡县| 沾化县| 玉山县| 双江| 昭苏县| 农安县| 贵德县| 西平县| 张家口市| 曲麻莱县| 和龙市| 大邑县| 永登县| 青浦区| 安塞县| 鄂托克旗| 桑植县| 连平县| 万州区| 仪陇县| 合川市| 珠海市| 孟州市| 郧西县|