Linux下管理java进程
来源:互联网 发布:新闻客户端 网络舆情 编辑:程序博客网 时间:2024/05/22 12:15
Linux下管理java进程
在一些项目中,经常会用到一些java后台进程,然而如何管理这些java后台进程却是不是很方便。在java中有守护进程的概念,就是运行在后台的线程,而其在java里面的解释是在后台运行的线程,只有当所有的非守护线程都结束的时候,这个守护进程才会结束,这也是管理进程的一个小知识,那么主要管理线程的方法有哪些了?
一. 可以开启两线程,一个定时扫描,一个是目标线程,扫描线程定时查看目标线程的状态,然后根据自己的业务绣球来管理目标线程。
二. 我们在学java socket的时候可以知道,我们可以为线程开启监听ServerSocket, 当我们需要关闭进程的时候,我们可以发送报文来改变进程的标志变量,当需要重启进程时,只需要再次发送报文来重置这个标志变量来启动目标进程。
三.大家都知道每次开启一个进程的时候,操作系统都会为其分配一个唯一标示,就是进程ID,那么我们可以记录这个进程ID,为其管理提供句柄。就像IE的session重拾一样。
前面两种方法是基本功,也是不太好控制的方法,下面我们来用第三种方法在linux下面实现管理java后台进程,提供开启,关闭功能,当然可以结合linux下面的服务来实现,可以参考本人前篇 “Linux下自启动websphere服务”。
环境介绍: 系统: linux SUSE,步骤如下:
原理:
(1). 记录进程pid, 写入文件。如 java test & echo $? > pidfile 开启后台进程,并将进程id写入文件。
(2). linux下每开启一个进程会在/proc/下生成一个以pid为名字的文件,该文件记录进程的信息,如cmdline记录了开启该进程的名称,如 java test 开启的进程, cmdline ="java test", 这样我们可以有效判断该进程是否为我们开启的业务进程。
1. 环境变量设置
JAVA_HOME="/opt/IBM/WebSphere7/AppServer/java/bin"PATH=$JAVA_HOME:$PATH
CLASSPATH=$CLASSPATH:$libDir/log4j-1.2.14.jarCLASSPATH=$CLASSPATH:$libDir/commons-logging-1.0.4.jarCLASSPATH=$CLASSPATH:$libDir/AutomaticExecutor.jar:
serviceName="AutomaticProcessor"serviceNameLo="automaticProcessor"serviceUser="dsas"serviceUserHome="$appDir"serviceGroup="dsasgroup"
maxShutdownTime=15pidFile="/var/run/$serviceNameLo.pid"
javaCommand="java"javaClass="AutomaticExecutorConsole"javaArg="$configDir/config.properties $configDir/log4j.properties"javaCommandLine="$javaCommand -classpath $CLASSPATH $javaClass $javaArg"javaCommandLineKeyword="AutomaticExecutorConsole"
2. 启动脚本
function startService(){ getServicePid if [ $? -eq 0 ] then echo "$serviceName is already running" rc_failed 0 rc_status -v return 0 fi echo "starting the $serviceName " startServiceProcess if [ $? -ne 0 ] then rc_failed 1 rc_status -v return 1 fi rc_failed 0 rc_status -vecho "start the $serviceName successfully. " return 0}
3. 关闭脚本
function stopService(){ getServicePid if [ $? -ne 0 ] then echo "$serviceName is not running." rc_failed 0 rc_status -v return 0 fi echo "stopping the $serviceName " stopServiceProcess if [ $? -ne 0 ] then rc_failed 1 rc_status -v return 1 fi rc_failed 0 rc_status -vecho "stop the $serviceName successfully. " return 0}
4. 获取进程Id
function checkProcessIsRunning(){ local pid=$1 if [ -z "$pid" -o $pid -le 0 ] then return 1 fi if [ ! -e /proc/$pid ] then return 1 fi return 0}function checkProcessIsOurService(){ local pid="$1" local cmd="$(ps -p $pid --no-headers -o comm)" if [ "$cmd" != "$javaCommand" -a "$cmd" != "$javaCommand.bin" ] then return 1 fi/bin/grep -q --binary -F "$javaCommandLineKeyword" /proc/$pid/cmdline if [ $? -ne 0 ] then return 1 fi return 0}function getServicePid(){ if [ ! -f $pidFile ] then return 1 fi servicePid="$(<$pidFile)" checkProcessIsRunning $servicePid if [ $? -ne 0 ] then return 1 fi checkProcessIsOurService $servicePid if [ $? -ne 0 ] then return 1 fi return 0}
5. 主程序
rc_reset
case "$1" in start) startService ;; stop) stopService ;; restart) stopService && startService ;; status) checkServiceStatus ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;;esacrc_exit;
这部分工作主要常见于实施过程,也是实施工程师的主要职责,本人刚接触这种业务,所以从零开始学习,最终完成这个小任务,得好好捋捋linux ,shell.
function stopService(){ getServicePid if [ $? -ne 0 ] then echo "$serviceName is not running." rc_failed 0 rc_status -v return 0 fi echo "stopping the $serviceName " stopServiceProcess if [ $? -ne 0 ] then rc_failed 1 rc_status -v return 1 fi rc_failed 0 rc_status -vecho "stop the $serviceName successfully. " return 0}
- Linux下管理java进程
- 如何在Linux下管理Java进程
- Linux下进程管理
- Linux下进程管理
- Linux下进程管理
- Linux下进程管理
- Linux下进程管理
- linux下进程管理
- linux下的进程管理
- Linux下的进程管理
- Linux下进程管理一
- Linux下的进程管理
- linux下的进程管理
- windows下管理java进程
- Linux下进程管理与控制
- linux或mac下进程管理
- Linux进程管理下的PCB(task_struct)
- LINUX下查询JAVA进程
- 2013网易技术类笔试题(java开发方向+移动平台开发)
- Linux下Matlab安装
- 计算机科学与技术专业的困惑
- 并行计算基础及工具
- 外部程序启动器MFC
- Linux下管理java进程
- 有关Request对象 10.10
- JavaScript继承1
- 关于IPhone内存管理的其它10个Tips
- asdf
- java第一章笔记
- Linux设备驱动子系统-SD卡
- ListView组件的应用(模拟新浪微博界面)
- C\C++编译器关于变量的内存分配顺序总结