如何在Linux下管理Java进程

本篇介绍一下如何在Linux下管理Java进程。由于在Linux下ps命令的强大,在linux下并不需要像Windows系统那样费力的区分不同的java进程。但是在Linux下,需要对进程进行这样的管理:一个商用的服务系统,需要提供的是24小时不间断的服务,但是由于各种原因,有可能会造成当前java进程对应的JVM的crash。因此,本篇介绍如何写一段shell脚本方便的启动、停止、守护一个java进程。 

首先,这段shell应该有start和stop的功能。如何stop当前我想停止的进程在Linux下有很多方法,我用的方法是,启动时将进程对应的process id记录到一个文件中,在停止这个进程时,从文件中读取process id进行kill。同时,做一个crontab,不停在系统中查找文件中的process id对应的进程是否存在,如果不存在,重新启动该进程。 

启动和停止脚本:ctrl.sh

Shell代码

#!/bin/sh    #    # start/stop the Service       #    # do some init here    #    case "$1" in    'restart')                # first Stopping the Service        PID=`sed -n 1p pidfile`  #get pid from file        if [ ! -z "$PID" ] ; then                    echo "Stopping the Service, begin killing ${PID}"            kill ${PID} >/dev/null 2>&1            sleep 2       fi        # second Starting the Service        if [ some condition here ]; then              echo "Starting the Service"            java -classpath some_class_path_here -jar helloworld.jar &              echo $! > pidfile   #record process id to file        fi        ;;    'stop')        # Stopping the Service        PID=`sed -n 1p pidfile`  #get pid from pidfile        if [ ! -z "$PID" ] ; then                echo "Stopping the Service, begin killing ${PID}"            kill ${PID} >/dev/null 2>&1       fi        ;;    *)        echo "Unmarkable usage: $0 {restart|stop}"       ;;    esac   

#!/bin/sh # # start/stop the Service # # do some init here # case "$1" in 'restart') # first Stopping the Service PID=`sed -n 1p pidfile` #get pid from file if [ ! -z "$PID" ] ; then echo "Stopping the Service, begin killing ${PID}" kill ${PID} >/dev/null 2>&1 sleep 2 fi # second Starting the Service if [ some condition here ]; then echo "Starting the Service" java -classpath some_class_path_here -jar helloworld.jar & echo $! > pidfile #record process id to file fi ;; 'stop') # Stopping the Service PID=`sed -n 1p pidfile` #get pid from pidfile if [ ! -z "$PID" ] ; then echo "Stopping the Service, begin killing ${PID}" kill ${PID} >/dev/null 2>&1 fi ;; *) echo "Unmarkable usage: $0 {restart|stop}" ;; esac

然后再做一个crontab需要执行的脚本:crntb.sh

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwppsz.html