我写了一个java程序,其内部包含一个容器。现在已经可以通过命令行带参数启动该程序,主要是运用到main函数的String args[]。现在要
在程序启动后支持命令重启这个程序内部的容器(不是重启程序)。我现在可以通过以下代码实现:
Scanner in = new Scanner(System.in);
String command = null;
do {
System.out.println("Please Enter Command :");
command = in.nextLine();
if (command.equals(Constant.BOOT_ARGS_CMD_QUIT)) {
System.out.println("start quite program .......");
//退出流程
System.out.println("end quite program .......");
break;
}else if(command.equals(Constant.BOOT_ARGS_CMD_REBOOT)){
//重启逻辑
}else {
System.out.println("Unknow Command : " + command);
}
} while (true);
请问我这种方式, 在linux下用nohup后台运行后,是不是上面的方式就不支持了?我想要的最好实现方式是如下:
//启动
xxx.jar start 100
//重启容器
xxx.jar reboot
nohup的话你就没法监控命令行了,不过你可以换个思路。比如监控文件内容,通过读取文件内容来启动或者reboot你的程序。
监控文件变化有两种方式:1、inotify,当文件产生变化的时候会触发你的程序监听,具体你可以查看inotify的接口文档
2、循环读取文件内容,这种比较简单也比较暴力。
希望对你能产生帮助
一个Java程序里涵盖一个容器,这个Java程序来控制这个容器的开关 重启,可以在程序里写 启动和关闭,重启 容器的方法,在外边执行nohup 启动你的程序 写几个脚本调用你程序里的方法就ok了,不需要关闭你的程序,由程序内部的方法来控制容器的开关!很简单的问题!
可以考虑用本地Socket通讯方式 ,发送接收命令实现你的 功能。
你可能需要进程间通信机制:pipe, signal等都可以考虑。