JAVA重启自身程序
来源:互联网 发布:淘宝上有卖大便的妈 编辑:程序博客网 时间:2024/05/22 04:43
,在使用java编写重启自身的程序时,本以为很简单,但是发现没有那么顺利
一般程序重启方法:service xxxx restart
但java程序执行这个操作时,发现整个程序只能stop, 不能start
解决思路:
当时想的是,使用后台命令执行service xxxx restart命令,如使用 nohup, setsid等方法,
经过测试发现,并没有那么顺利,使用Runtime.getRuntime().addShutdownHook()方法也不怎么好使
后面就写了一个稍微麻烦的方法来解决这个问题
当接收到重启命令时,创建一个新的进程,这个进程用来检测java程序运行状态,然后关闭service服务。
String stopCommond = "setsid service xxxx stop" ; // 创建一个线程,用来启动检测的进程 new Thread(new Runnable() { @Override public void run() { //后台启动检查程序巡行状态的进程 String listenter = "nohup java -cp /opt/csic/jar/util.procadm.jar at.csic.util.procadm.RestartSelfListener &"; NodeManagementUtils.execCommand(listenter); } }).start(); Thread.sleep(1000); NodeManagementUtils.execCommand(stopCommond);
RestartSelfListener 类
public class RestartSelfListener { private static Properties properties; public RestartSelfListener() { final String restartCmd = "service xxxx start"; new Thread(new Runnable() { @Override public void run() { int i = 0; while (i < 60) { i++; //检测service服务是否存在,当结果为0时,不存在 String checkCmd = "jps -l |grep ProcessControlServer|wc -l"; String result = RestartSelfListener.execCommand(checkCmd); //结果为0,service服务停掉,启动程序 if ("0".equals(result)) { RestartSelfListener.execCommand(restartCmd); break; } try { // 5 秒钟检测一下服务的状态 Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } public static String execCommand(String cmd) { StringBuffer sb = new StringBuffer(); BufferedReader in = null; try { Runtime rt = Runtime.getRuntime(); String[] cmdA = { "/bin/sh", "-c", cmd }; Process p = rt.exec(cmdA); in = new BufferedReader(new InputStreamReader(p.getInputStream())); String str = null; while ((str = in.readLine()) != null) { sb.append(str); } if (null != in) { in.close(); } } catch (IOException e) { } return sb.toString(); } public static void main(String[] args) { new RestartSelfListener(); }
阅读全文
0 0
- JAVA重启自身程序
- webapp 重启自身
- 通过按钮实现程序自身的重启
- .Net Winform 程序自我重启 或删除自身
- android重启自身应用APP
- java程序自动重启
- linux重启java程序
- shell 启动、停止、重启java程序
- shell 启动、停止、重启java程序
- android重启应用(应用重新启动自身)
- 打印自身的程序
- 打印自身程序
- 删除程序自身
- 打印自身的程序
- 打印自身的程序
- c#复制自身程序
- C#程序删除自身
- 删除程序自身
- 排序
- 十三、kubernetes详细介绍
- Leetcode 算法习题 第十五周
- 栈与队列-单调栈,单调队列
- NodeJS对异常的处理
- JAVA重启自身程序
- WebRTC学习资料大全
- MFC 为按钮添加图片
- 报表在linux上打印问题
- 【TOMCAT】windows7下tomcat6环境部署
- leetcode 380. Insert Delete GetRandom O(1)
- $uibModal 模态窗口服务
- Digit Divide Numbers
- Spark 及其生态圈