`

后台启动一个进程(报警)

阅读更多



 当点击启动的时候,会调用后台的代码(当然会传一个参数过去)

public String start() { 
		 
		String appName=(String)paramMap.get("appName");
		if (appName!=null){
			String masHome=System.getenv("ADS_HOME"); 
			String appCmd=null;
			String appPath=null;
			if (appName.equals("AlarmMain")){ 
				appPath=masHome+"/bin/alarm";
				appCmd=appPath+"/alarm.sh";
			}
			try {
				if (appCmd!=null){
					ProcessBuilder pb=new ProcessBuilder(appCmd);
					pb.directory(new File(appPath));
					pb.start();
					logger.debug( "用户:" + getLoginUserName()+" 启动模块:"+appName);
					
					Thread.sleep(2000);
				} 
			} catch (Exception e) { 
				logger.warn(StringUtil.getStackTrace(e));
			}  
			
		}
		return "redirect:list";
	}

 这样后台就会启动一个进程执行一个命令appCmd,这样就执行了alarm.sh的shell脚本

cd ${ADS_HOME}/bin/alarm
source ../setenv.sh
nohup java -DADS_HOME=$ADS_HOME com/listong/ads/alarm/AlarmMain applicationContext.xml alarm.conf >/dev/null &
echo $! >${ADS_HOME}/bin/alarm/server.pid

 

又会执行setenv.sh的脚本,此脚本是用于添加运行环境什么的

export LANG=zh_CN
export JAVA_HOME=/usr/java/jdk1.6.0_16

ADS_HOME=/data/ads
export ADS_HOME
#echo $ADS_HOME

LIBPATH=${ADS_HOME}/lib 
#echo $LIBPATH

for file in ${LIBPATH}/*.jar;
do
#echo $file;
CLASSPATH=$CLASSPATH:$file
done

DISTPATH=${ADS_HOME}/dist
for file in ${DISTPATH}/*.jar;
do
#echo $file;
CLASSPATH=$CLASSPATH:$file
done


export CLASSPATH 

#echo $CLASSPATH

export LD_LIBRARY_PATH=/usr/local/lib

export PATH=$PATH:${JAVA_HOME}/bin

执行完后会跳到list方法去 
public String list() { 
		List<PsInfo> pidList=new ArrayList();
		
		String appNames[]={"AlarmMain"};
		 
		for (int i=0;i<appNames.length;i++){
			PsInfo pi=PsUtil.getPsInfo(appNames[i]);
			if (pi==null){
				pi=getZeroPsInfo(appNames[i]);
			}
			pidList.add(pi);
		} 
		storeInRequest("pidList", pidList);
		 
		return "pidlist.jsp";
	}  
 然后执行PsUtil的getPsInfo的方法,这样就可以获得linux下的进程的信息包括pid也就是进程号,获得之后存起来。
package com.listong.ads.util.tool;

import java.io.BufferedReader;  
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader; 

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class PsUtil {
	 
	private static final Logger logger = LoggerFactory.getLogger(PsUtil.class);
	
	public static void main(String[] args) { 
		
		ProcessBuilder pb = new ProcessBuilder("/data/mas/bin/sms/sms.sh"); 
		//	Map env = pb.environment();
		//	env.put("key1", "value1");
		//	env.remove("key2");
		//	env.put("key2", env.get("key1") + "_test"); 
			pb.directory(new File("/data/mas/bin/sms")); // 设置工作目录
			try {
				Process p = pb.start();
			} catch (IOException e) { 
				e.printStackTrace();
			} // 建立子进程
				                

		/*
		String str=getPsStr(args[0]);
		System.out.println(str);
		PsInfo pi=getPsInfo(args[0]);
		if (pi!=null)
			System.out.println(pi.getUser()+ " "+pi.getPid()+" "+pi.getCpuPercent()+" "+pi.getMemPercent()
				+" "+pi.getVsz()+" "+pi.getRss()+" "+pi.getTty()+" "+pi.getStat()+" "+pi.getStart()+" "+pi.getTime());
		*/
	}
	public static PsInfo getPsInfo(String grepStr){
		PsInfo pi=new PsInfo();
		pi.setAppName(grepStr);
		try{ 
		String str=getPsStr(grepStr);
		if (str==null){
			return null;
		}
		while (true){ 
			if (str.indexOf("  ")>0){
				str=str.replaceAll("  ", " ");
			}else{
				break;
			}
		}
		
		String strs[]=str.split(" "); 
		 
		pi.setUser(strs[0]);
		pi.setPid(strs[1]);
		pi.setCpuPercent(strs[2]);
		pi.setMemPercent(strs[3]);
		pi.setVsz(strs[4]);
		pi.setRss(strs[5]);
		pi.setTty(strs[6]);
		pi.setStat(strs[7]);
		pi.setStart(strs[8]); 
		pi.setTime(strs[9]);     
		}catch(Exception e){ 
			e.printStackTrace();
		}
		return pi;
	}
	public static String getPsStr(String grepStr){
		Process p = null;  
		BufferedReader br=null;
		try {
			//执行命令  
			p = new ProcessBuilder("ps","aux").start(); 
			br=new  BufferedReader(new InputStreamReader(p.getInputStream())); 
			String line=null;
			while (true){
				line=br.readLine();
				if (line==null){ 
					return null;
				}
				if (line.indexOf("com.moto.mas.util.tool.PsUtil")>0){
					continue;
				}
				if (line.indexOf(grepStr)>0){ 
					return line;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}finally{
			try {
				if (br!=null)
					br.close();
			} catch (Exception e2) {
			}
		} 
	}

	public static PsInfo getPsInfoByPID(String pId){
		
		PsInfo psInfo = new PsInfo();
		psInfo.setAppName(pId);
		
		Process p = null;
		BufferedReader br=null;
		try {
			//执行命令  
			p = new ProcessBuilder("ps","aux").start(); 
			br=new  BufferedReader(new InputStreamReader(p.getInputStream())); 
			String line=null;
			while (true){
				line=br.readLine();
				if (line==null){ 
					return null;
				}
				
				while (true){ 
					if (line.indexOf("  ")>0){
						line=line.replaceAll("  ", " ");
					}else{
						break;
					}
				}				
				
				String strs[]=line.split(" "); 
				if(strs[1].equals(pId)==true){
					psInfo.setUser(strs[0]);
					psInfo.setPid(strs[1]);
					psInfo.setCpuPercent(strs[2]);
					psInfo.setMemPercent(strs[3]);
					psInfo.setVsz(strs[4]);
					psInfo.setRss(strs[5]);
					psInfo.setTty(strs[6]);
					psInfo.setStat(strs[7]);
					psInfo.setStart(strs[8]); 
					psInfo.setTime(strs[9]);    
					break;
				}
				
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}finally{
			try {
				if (br!=null)
					br.close();
			} catch (Exception e2) {
			}
		} 	
		
		return psInfo;
	}
	
	public static String getDuStr(String path){
		Process p = null;  
		BufferedReader br=null;
		try {
			//执行命令  
			p = new ProcessBuilder("du","sh",path).start(); 
			br=new  BufferedReader(new InputStreamReader(p.getInputStream())); 
			String line=br.readLine();
			logger.debug("du -sh path @@ disk line == " + line);
			if (line==null){ 
				return null;
			}
			
			int ind = line.indexOf("/");
			String s = line.substring(0,ind-1);
			logger.debug("du -sh path @@ disk Use == " + s);
			
			return s;
			
		} catch (Exception e) {
			logger.error("",e);
			return null;
		}finally{
			try {
				if (br!=null)
					br.close();
			} catch (Exception e2) {
			}
		} 		
	}
}

 上面的PsUtil的类就相当在linux下执行了"ps"的命令来查看进程。          有了进程的信息,这样我们就可以根据进程的pid来停止此进程,传一个pid过去到stop方法去停止进程
public String stop() { 
		String pid=(String)paramMap.get("pid");
		try {
			new ProcessBuilder("kill",pid).start();
			logger.debug( "用户:" + getLoginUserName()+" 停止进程ID:"+pid);
			Thread.sleep(2000);
		} catch (Exception e) { 
			logger.warn(StringUtil.getStackTrace(e));
		}     
		return "redirect:list";
	}
 上面就是在linux下执行"kill"命令,这样就停止了这个进程

 

 

  • 大小: 2.2 KB
分享到:
评论

相关推荐

    supervisor

    Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,...

    详解Linux监控重要进程的实现方法

    这时就需要一个监控程序来实现能够让服务进程自动重新启动。查阅相关资料及尝试一些方法之后,总结linux系统监控重要进程的实现方法:脚本检测和子进程替换。 1、脚本检测 (1) 基本思路: 通过shell命令(ps -e | ...

    文件下载后台系统,基于AU3编写

    本程序采用CRC文件效验对比更新,用AU3编译,所有代码使用合法程序,无病毒无后门,360无报警。 程序修改编写 RX 测试平台: 服务器:win2008r2+phpStudy 客户端:win2003r2 使用手册: 注意:如果服务器80...

    Activity_Hijack.apk

    客户端程序可以在启动前检查Receiver并报警;由于Activity界面劫持攻击通常是将自己的页面附着在客户端之上,因此需要进行界面切换操作,因此在界面切换到后台时弹出警告信息也可以达到一定的效果。除此之外,因为...

    Paramon机群应用性能监控软件1.2.1

    高可靠性:Paramon后台守护进程占用系统负载小于0.1%; 提供校验标识,确保数据传输的可靠性。 高实用性:以清晰醒目的各种颜色在不同区域显示指标数据,让用户轻松了解结点状态。 Paramon前台系统的显示界面,...

    linux集群应用实战

    配置一个简单的iscsi target 在windows上配置iscsi initiator 在linux上配置iscsi initiator 第4讲 基于iscsi 在安全方面相关设定 课程目标: 如何管理和使用iscsi存储网络 initiator主机以ip认证方式获取...

    cmd操作命令和linux命令大全收集

    at ip time 程序名(或一个命令) /r 在某时间运行对方某程序并重新启动计算机 finger username @host 查看最近有哪些用户登陆 telnet ip 端口 远和登陆服务器,默认端口为23 open ip 连接到IP(属telnet登陆后的...

    集群好书《高性能Linux服务器构建实战》 试读章节下载

    2.3.2 配置一个简单的Varnish实例 2.3.3 Varnish对应多台Web服务器的配置实例 2.4 运行Varnish 2.4.1 varnishd指令 2.4.2 配置Varnish运行脚本 2.4.3 管理Varnish运行日志 2.5 管理Varnish 2.5.1 ...

    windowsnt 技术内幕

    制作一张网络客户安装启动磁盘 制作安装磁盘组 基于客户的网络管理工具 Windows NT Workstation的网络管理工具 在一个Windows NT Workstation上安装管理工具的系统要求 Windows 95的网络管理工具 在Windows 95上安装...

    oracle数据库dba管理手册

    9.5.3 变成另一个用户 255 9.6 审计 257 9.6.1 登录审计 257 9.6.2 操作审计 258 9.6.3 对象审计 259 9.7 保护审计跟踪 260 9.8 分布式环境的安全性 260 9.9 解决方案 260 第10章 优化备份和恢复过程 262 10.1 特性 ...

Global site tag (gtag.js) - Google Analytics