从事Java开发的程序员应该知道,我们用SpringBoot开发完的程序,最终都是要上线的,也有的是私人用的,不管怎么样,它总是要被部署到一台服务器当中的,而服务器百分之99都是Linux系统,但是我们在Linux中一行一行去敲命令,首先太繁琐,容易敲错,而且不好管理程序,于是我们可以编写Shell脚本去启停和管理程序。
脚本
1 | !/bin/bash |
使用
启动Jar程序:sh xxx.sh start
停止Jar程序:sh xxx.sh stop
重启Jar程序:sh xxx.sh restart
查看程序状态:sh xxx.sh status
分析
一般情况下运行jar包,当前是可运行的jar包,我们可以直接使用命令
1 | java -jar xxx.jar |
按下ctrl+C ,关闭当前 ssh 或者直接关闭窗口,当前程序都会退出
我们在命令的结尾添加 “&” ,&表示该程序可以在后台执行
1 | java -jar xxx.jar & |
但是在当窗口关闭时,程序也会中止运行
命令最前面加个 nohup
关键字,这样程序就会不挂断运行命令,当ssh终端关闭时,程序仍然在运行,当前程序的日志会被写入到当前目录的 nohup.out
文件中
1 | nohup java -jar xxx.jar & |
我们可以改下输入的日志文件
1 | # 当前程序的日志会被写入到当前目录的 log.out 文件中 |
1 | # 如果不想写日志,可以将日志重定向到 /dev/null 中 |
1 | # 标准输出重定向到log.out中,然后错误输出由于重用了标准输出的描述符,所以错误输出也被定向到了log.out中 |
但是不管哪种情况,如果日志输出,日志文件都会增加很快,造成单个文件很大。
所以需要拆分文件:
1:定时作业,每天将日志文件复制一份,然后将当前的日志文件清空
2:借助 cronolog来分隔日志
1 | nohup java -jar xxx.jar | /usr/local/cronolog/sbin/cronolog logs/console-%Y-%m-%d.out & |
这样每天会产生一个console开头的日志文件。
如果我们想要查看日志信息,可以使用以下命令:
1 | # 实时查看日志后100行 |
问题
之前我在Windows系统的编辑器中编写好Shell脚本后,然后将其直接上传到Linux服务器中,但是运行时直接报错了。
1 | syntax error near unexpected token `$'\r' |
内心一万个WTF,为啥不行呢,其实是在Windows编写的时候换行符也搞过来了,两个系统并不适配。
第一步
1 | vim -b xxx.sh |
我ca,果然如此,在复制进来后,怎么每行后面都多了 ^M
这个玩意!!!
第二步
1 | sed -i 's/\r//g' xxx.sh |
大功告成,搞定了。