上一篇中详细介绍了如何在Windows系统下面如何管理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
#!/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
#!/bin/sh
PID=`sed -n 1p pidfile`
cmd=`ps -e|grep $PID` #get process with the given pid
indx=`expr index "$cmd" "java"` #whether the string 'cmd' contains 'java'
if [ "$indx" = "0" ]; then
/...path of ctrl.sh.../ctrl.sh restart
fi
最后在crontab中每分钟执行上面的crntb.sh
crontab -e
0-59 * * * * * /....path of crntb.sh.../crntb.sh
这样就可以每分钟查看当前pid对应的进程是不是还在,如果不在了,就重新启动。
当然,光用这几小段代码是不足以维护一个完整的商用程序的。但是,做到了这点,最起码万里长征的第一步已经迈出去了。
分享到:
相关推荐
Linux查看处理Java进程
linux下查看java进程下线程占用cpu情况
Linux平台 下 进程监控自动 重启 恢复脚本, 测试 centos平台下 java, springboot 通过
linux下启动Java程序和杀死java进程shell脚本
JAVA 进程在64位LINUX下占用巨大内存的分析.doc
一个linux进程管理的东东,喜欢linux的朋友一定要下啊
linux中常用的杀进程的两种方法,简单有效的杀掉一些不受控制的进程
zabbix自动发现JAVA进程,并进行自动添加监控JAVA 进程的JVM数据,统计分析告警监控。 支持多种中间件,tomcat、weblogic、微服务方式部署JAVA应用监控。 自带发现脚本和监控脚本,以及zabbix导入模板。
Linux中将Tomcat添加到守护进程,让Tomcat随Linux系统自动启动;以及解决执行tomcat start时,“Invalid user name 'tomcat' specified”的异常处理。
操作系统课程设计,基于Linux的模拟进程调度算法,有代码 课程设计任务书说明书,改代码随机生成十个线程进行fcfs,hrrn,sjf进行调度计算周转时间带权周转时间,并且比较算法优劣,可在Linux系统上运行
Linux与Java性能跟踪与分析工具.ppt ,讲得很不错,值得你拥有
通常情况下,启动一个Java进程往往是使用java -jar xxxx.jar命令,其中xxxx.jar是启动的jar文件。如果需要增加VM参数的话就需要在java后面添加相应的VM参数,如果需要传入参数的话,还需要在命令的最后面添加传入的...
Java调用Linux命令 调用Runtime.exec方法将产生一个本地的进程,并返回一个Process子类的实例, (注意:Runtime.getRuntime().exec(command)返回的是一个Process类的实例), 该实例可用于控制进程或取得进程的...
课设项目基于Java可视化仿真实现Linux2.6进程管理与内存管理源码+项目说明+实验报告.zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科...
linux下查看端口占用情况: 1. 查看哪个进程占用了819端口: case9...由以上我们知道了859端口被进程号为24907的进程占用了, 是个java进程。 2. 查看进程号为24907的进程在哪里: case9-sghfofo:/usr/local/cnbj/tomca
通常情况下,启动一个Java进程往往是使用java -jar xxxx.jar命令,其中xxxx.jar是启动的jar文件。如果需要增加VM参数的话就需要在java后面添加相应的VM参数,如果需要传入参数的话,还需要在命令的最后面添加传入的...
计算机操作系统课程设计-基于Java实现的可视化仿真实现Linux2.6进程管理与内存管理+源代码+文档说明+实验报告 可视化仿真实现Linux2.6进程管理与内存管理,计算机操作系统课程设计 摘要 为了检验自己的操作系统课程...
NULL 博文链接:https://qsfwy.iteye.com/blog/1650426
本篇文章主要介绍了Java如何获取当前进程ID以及所有Java进程的进程ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
主要介绍了Java实现Linux下双守护进程的思路、原理以及具体实现方式,非常的详细,希望对大家有所帮助