我正在将Java REST服务从“传统”方式(作为兼容servlet的.war部署到多租户应用服务器(Tomcat))转换为更简单的嵌入式设置,其中有一个简单的Java主类启动嵌入式http服务器(Grizzly Jersey).一个缺少的部分是服务包装器.我可以通过执行’java -jar myservice.jar’来手动运行该服务,但是我想实现为适当的Linux后台服务.
通常,这是通过放入/etc/init.d中的简单Bash shell脚本完成的.我已经看到了一些超级简单的示例,但是它们使用进程终止而不是正常关闭来实现关闭.我也看到了一些商用工具来处理此问题,但是此任务似乎太简单了,无法使用商用工具.
我的第一个猜测是在第二个端口上添加一个单独的超级简单REST服务,以监听关闭请求,并让/etc/init.d Bash shell脚本以这种方式发送关闭请求.
是否有更好或更标准的解决方案来解决此问题?
解决方法:
kill是可以的(如果不是kill -9),则应仅执行shutdown钩子以正常停止
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
//TODO stop web server and close db connection if needed
}
}));
标签:bash,daemon,web-services,linux,java
来源: https://codeday.me/bug/20191122/2059059.html