java应用程序在linux上运行无法自动退出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java应用程序在linux上运行无法自动退出相关的知识,希望对你有一定的参考价值。

1.多线程的,windows下一切正常,部署在linux上后,程序到while的地方停止不动了
while是判断所有线程是否全部结束的地方 经过测试发觉只要在下面2个地方加入System.out.println(任意) 程序会输出内容最后会终止 否则就会停在那边一直停着了
while(true)

System.out.println(任意);
if(线程数==0)

break;

这个程序在windows下没任何问题啊,jre版本也一样,奇怪啊.

System.out.println(任意);

2.这个多线程是往文本里写内容,在windows下一切正常,在linux下写入时中文全部为乱码与null
写文件方法是
new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename,true),"utf-8")),求帮忙.
3.这个程序是抓取网页的程序

你看看是不是你while(true)里面得加上个sleep1毫秒或者yield之类的啊,可能linux的线程调度算法不一样,你这样死命循环可能其他线程就没机会运行了,你加了println之后因为输出屏幕,所以等待io的时候其他线程有机会执行 参考技术A java有linux专用的

将java程序注册成windows服务自启动并异常退出自动重启

文章目录


前言

linux下有docker方便部署java程序,在windows服务器下,大多人我觉得可能就是一个批处理启动,然后黑窗口运行,如果被哪个坑爹的不小心关闭了,就得把维护人员气死。


一、神器NSSM

windows下运行web服务最完美的情况就是注册成系统服务,让windows系统去管理启动和重启,这样非常方便。

在使用Grafana的过程中,发现它使用到一个nssm的程序启动的web服务,然后跟着研究了下,发现nssm绝对是个神器,然后在我的研究又完善了下,现在可以使用java程序的开机自启动,异常退出自动重启,使用windows系统服务的错误处理机制,保障能各种意外退出都能重启服务。

二、使用方法

首先去官网下载链接: 官网
官网有说明,可以参考说明写自己的脚本,也可以下载我写好的一套安装卸载,启动的脚本
一键操作脚本
将你的jar文件放到脚本解压后的目录,修改start.bat中jar文件名,如果像修改服务名称,在install和uninstall脚本中修改demoServer为你自己的服务名。然后双击install安装,然后如下图,已经正常启动了。

安装后自动设置异常恢复机制,自动重启服务

删除时运行uninstall,删除服务。

总结

还是linux服务器好用[手动滑稽]

以上是关于java应用程序在linux上运行无法自动退出的主要内容,如果未能解决你的问题,请参考以下文章

ssh连接断开后 shell进程退出

将java程序注册成windows服务自启动并异常退出自动重启

将java程序注册成windows服务自启动并异常退出自动重启

JavaFX应用程序无法启动(MacOS使用JDK11)

Linux 进程退出后自动启动

从 EC2 CLI 退出后如何保持我的 Web 应用程序运行