平时开发java项目时,直接命令启动很不方便,而且脚本在linux和windows下还不同,为了方便以后使用,所以经过实测总结了下面四个脚本(以springboot项目进行的测试)。
1、windows下启动脚本
@echo off
%1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close)&&exit
java -jar wyt01sbdemo-0.0.1-SNAPSHOT.jar >> StartupLog.log 2>&1 &
exit
虚拟机启动参数可以根据实际使用进行适当增减,另外此处日志打印是打印到指定位置和名称,如果想用项目中自己定义的日志生成地址为名称,可以将>>和其后面所有的内容删除
2、windows下关闭脚本
正常手动操作,一般会直接关闭启动窗口或者jps查到对应的线程,然后通过taskkill /f /pid 线程号 进行删除,这种方式对于不常用命令的人来说比较难使用,所以还是推荐使用脚本,脚本如下:
@echo off
set port=17001
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do (
echo kill the process %%m who use the port
taskkill /pid %%m -t -f
goto q
)
:q
这里有个局限性,也可以叫坑,就是脚本是根据端口号进行关闭的,所以java项目一定要以web当时启动才行,因为非web方式启动不带端口号,这样就没法关闭。解决方法比较多,大家可以上网搜如何以web方式启动。这里提供一种简单的解决方式,即在pom中引入以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
关于linux下的启动关闭脚本,建议尽量再linux环境下编辑,因为我个人在windows下编辑好再上传进去脚本运行出现了错误提示,然后查了下好像是因为系统不同,所以对于脚本的编码不同导致。
3、linux下启动
echo 'start wyt01sbdemo ...'
nohup java -jar wyt01sbdemo-0.0.1-SNAPSHOT.jar --server.port=17001 > ./wyt01sbdemo.log 2>&1 &
echo 'start finsh'
这里也是指定了日志的路径和名称,如果想用项目中自己配置的日志文件名称和生成路径,可以将 ./wyt01sbdemo.log 替换成 /dev/null
4、linux下关闭
echo 'kill wyt01sbdemo'
for process in "`ps -ef|grep wyt01sbdemo-0.0.1-SNAPSHOT.jar |grep -v grep|awk '{print $2}'`"
do
kill -9 $process
done
echo 'kill finsh'
上面是根据项目的整体名称进行过滤删除的,如果想根据端口号删除,可以参考如下的脚本:
echo 'kill wyt01sbdemo'
for process in "`lsof -i:17001|grep -v 'PID'|awk '{print $2}'`"
do
kill -9 $process
done
echo 'kill finsh'
上面四个脚本经过实测都是可行,如果有错误和待改进的地方,欢迎各位大佬留言!
参考链接:
https://blog.youkuaiyun.com/chj_1224365967/article/details/111364130
https://www.jb51.net/article/200804.htm
https://blog.youkuaiyun.com/ml0228123/article/details/107333204/