跳到主要內容

發表文章

目前顯示的是 4月, 2016的文章

自動化重啟 Java Process

有些狀況下會碰到需要關閉 Java process 的狀況 不管是不可預期的,例如 OOM 導致 process crash 或是可預期的狀況,例如需要 Java程式、設定檔更新,而在系統內用 System.exit(0); 通常我們都會需要馬上再重開 Java process,將處理流程自動化會方便得多 Linux  bash 示範   JPID=0   while [ $JPID-eq 0 ]   do     eval "(java ...)"   # eval your own java process.     JPID=$?       # set PID to status.   done 用個迴圈監聽PID是否存在 Windows batch 寫法也是基於同樣概念 :exeLoop set JPID=-1 for /F "tokens=1" %%i in ('jps -lv ^| find "%MAINCLASS%"') do ( set JPID=%%i ) if %JPID%==-1 ( echo %_EXECJAVA% %JAVA_OPTS% -classpath "%CLASSPATH%" -.... %MAINCLASS% :: execute your own java process. ping 127.0.0.1 -n 2 -w 1000 > nul     :: wait for 2 seconds before next loop. ) goto exeLoop

Java 輸出 Exception 訊息到指定物件

Java 的 Exception 訊息預設會輸出到 Java Console 如果要將訊息另外紀錄在指定的文字檔案,可以採取的作法有兩種 1. 在作業系統下指令將 Java process 的輸出存到指定的文字檔 例如 Linux 環境下 eval \"$_RUNJAVA\" $JAVA_OPTS \ -classpath \"$CLASSPATH\"  >> "/log/err.txt" 2>&1 p.s.  上述的Java相關執行跟參數都是用另外指定的參數,所以請不要直接照抄 2. 將 Exception 存到 String 物件後,再另外用這個 String 做後續處理 StringWriter sw = new StringWriter(); e.printStackTrace(new PrintWriter(sw)); String errMsg = e.getMessage() + "\r\n " + sw.toString();