背景介绍

1.阿里云服务器
2.Windows操作系统
3.Oracle数据库
4.java -jar运行jar包
5.以上不是重点
6.程序员克星–360安全卫士

问题场景

服务器上使用java -jar运行的jar包,隔断时间就会自动关闭。使用bat批处理文件运行,也一样。甚至于写了个监控jar包进程的bat批处理文件(每10秒检测该jar包进程是否存在,若不存在,则执行启动jar包的bat),还是没用,甚至于连该监控的cmd窗口都被关闭。

解决方案

偶然的计划看到有博主说是360会自动关闭。正好在服务器上苦思冥想查看报错日志的时候,360弹了个框提示我们的jar包是病毒,-_-||,倒计时30秒,不执行操作就要关闭了。

java运行jar闪退 jar包运行闪退_java运行jar闪退


后来看了下360的拦截记录,我们系统上传的图片很多都被拦截了(都是照片被拦截,导致本地也没有存到)。包括但不限于身份证照片、自拍照、截图等。访问的用户越多,上传的照片越多,拦截频率越大,关闭程序越多。(* ̄︶ ̄)然而因为一些特殊原因,还不能卸载服务器上的360,只能先加入可信程序中。然后还发现360有个云安全计划,会把我们这的(可疑)文件都传到360服务器去(可不可疑也是他说了算对吧)。。

总之卸载360保代码无bug。。不然真是玄学编码。。

监控bat语句

最后附上监控进程的bat,括号内容需要删除,为解释,这两个bat放同级目录
1.运行jar包的语句

title Process monitoring start jmt3-1

#set AppName=jhh3-1.jar(jar包名称)
#set AppPath=D:\jhh3.1\(存放jar包的文件夹绝对路径)

# java -jar  %AppPath%%AppName% 2>nul && echo ^>%date:~0,10% %time:~0,8% start jhh3-1 success(替换jar包名称)
java -jar jhh3-1.jar  -XX:PermSize=100m -XX:MaxPermSize=500m(替换jar包名称)
exit

2.监控语句

@echo off 
set AppName=jhh3-1.jar(jar包名称)
set AppPath=D:\jhh3.1\(存放jar包的文件夹绝对路径)
title Process monitoring jhh3-1
cls
echo.
echo Process monitoring jhh3-1 start...
echo.
:startjc
   
   jps -l |findstr /i %AppName% >nul
   if %errorlevel%==0 (
         echo ^>%date:~0,10% %time:~0,8% jhh3-1 is running...
    )else (
           echo ^>%date:~0,10% %time:~0,8% not found jhh3-1
           echo ^>%date:~0,10% %time:~0,8% restart jhh3-1
           start start.bat(第一个启动jar包的bat文件名)
   )
   for /l %%i in (1,1,10) do ping -n 1 -w 1000 168.20.0.1>nul
   goto startjc
echo on

3.首先运行监控的bat就行了,他检测不到的时候会自动启动jar包。会有两个cmd窗口。若窗口有乱码显示,可能是因为bat语句中的中文或注释。