java程序员需要知道的linux知识(二)
承接上文,在上文中我们讲到了如何查看系统状态,如何把项目传到服务器上,今天我们来聊一聊如何在服务器上把程序启动起来,以及查看运行的状态
## 在服务器上运行java程序
我们在本地开发时,在idea中可以直接通过idea的配置启动项目,如下图所示,但是在服务器上怎么运行呢?(这里面先只讨论web程序的运行)
先要说下打包方式,web程序有两种打包方式:
一种是打包war
包,
打成war
包需要再下载一个tomcat
,把war包丢到tomcat的webapp
目录或者其他目录然后在tomcat 的server.xml中host/context
节点下配置目录
然后执行tomat目录下/bin/startup.sh
来启动程序
一种是打包成jar包
这种方式是我比较喜欢的方式,因为不需要再下载什么,直接把jar传到服务器上,通过平常使用java -jar
命令就可以启动了,如下图所示:
和war
包运行不一样的是,运行startup.sh的时候,程序会后台运行,关了linux连接也没关系,但是用java启动的就不一样了,这个窗口一关,程序就挂了。
后台运行
war
包可以直接通过tomat的 start.sh
后台运行,我们可以深入startup.sh
,发现执行的是 catalina.sh
打开catalina.sh
找到最行执行java的部分
会发现其实也是简单的命令拼起来的,关键在于最后的这个 &
符号。我们在jar包发布的命令同样加就可以了:
java -jar xxx.jar &
这样就可以后台运行啦
查看日志
查看日志常用的有两种,一种是常看实时日志,常用于开发调试的时候。因为程序运行在服务端,黑乎乎的,啥都看不到,这个时候,要是程序哪块功能运行不正常了,就只有上服务器查日志,看看抛了什么异常,还是参数不对。
简单说一说程序中的日志代码
这不是专门讲日志的文章,所以这块简单说一说,首先,声明都用slf4的Logger,这样无论实际实现是用logback , log4j , 等等,都可以做到只改jar包不改代码。
private final static Logger logger = LoggerFactory.getLogger(xxxx.class);
具体配置这篇就不讲了,通过开发的时候开启debug , 线上的时候只打error级别,然后注意两个位置,一个是 tomcat/logs/catalina.out
这个是用tomcat运行war包时,控制台的输出,都会进入到这个文件中,是日志最全的地方,另外一个就是程序中自己配置的位置。自己配置上的位置可以把远程调用,sql, 应用错误等等归到不同的文件中,方便查看
常用的查看日志命令
就笔者经验而言其实就一个命令:tail
实时查看,用于能现场复现的问题 tail -f xxxx.out
刚刚才出现问题,往上面翻几行 tail -n1000 xxxx.out
服务器流量很大,日志一直刷个不停,看的眼都花了,那就过滤下
tail -f | grep 'xxx' 这样可以只显示带有'xxx'的日志
停止应用
现在我们开发了新的版本,要把以前运行的那个版本换下来,在窗口操作中,把程序关掉,然后重新打开新程序,在linux中思路也是一样:先找到原程序
ps aux |grep 程序名
红线框框中的内容就是id。
Kill -9 18794
去停掉原程序
按本文上面的运行java程序,启动新的服务
总结
结合上一篇,两篇内容简述了一个java程序员和linux服务器打交道的常用命令等等,抱砖引玉,还有很多很多可以大辐提升生产力的方法,如同一个机器上要同时跑一个jdk1.8的项目,和一个jdk1.6的项目,要怎么启动? 怎么通过脚本(.sh)实现自动化的停止,启动?
欢迎添加笔者微信:best396975802 一起讨论交流,这里还有好多一起学java的小伙伴在群你等你呢
上一篇: JAVA的反射