关于如何打包jar排除指定文件,参见上一篇:
1.如下项目文件的位置:
之前我是通过指令来部署的:
ps -aux | grep java --查询java应用
kill -s 9 24204 --停止应用
cd /tpsys/applications/platformUpload --切换应用目录
nohup java -jar platformUpload-0.01.jar >run.log & --启动
这样比较繁琐,改用文件操作
这里使用3个文件来管理jar:
1.start.sh 负责启动,注意这里是>> 追加,后面会说明为什么用>>
#!/bin/bash
echo platformUpload-0.01.jar start
nohup java -jar platformUpload-0.01.jar >>run.log &
2.stop.sh 负责关闭应用
#!/bin/bash
PID=$(ps -ef | grep platformUpload-0.01.jar | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
echo Application is already stopped
echo kill $PID
echo platformUpload-0.01.jar stopped
kill $PID
3.run.sh 先关闭应用再启动应用,并且删除原来的所有日志文件
#!/bin/bash
echo stop application
source stop.sh
echo delete logs and run.log
rm -rf ./logs
rm -rf run.log
echo start application
source start.sh
1.如果执行报错,记得授权:chmod u+x *.sh
2.如过sh文件是在window下面编写的,那么在linux下需要更改格式:否则报错:
-bash: ./stop.sh: /bin/bash^M: bad interpreter: No such file or directory
解决方法:
sed -i "s/\r//" xx.sh
或者使用dos2unix指令插件
2.上面已经把三个.sh文件编写好了.这里还有一个问题,如果run.log日志过大怎么处理?
这里我们可以采用定时任务分割run.log;同时清空原run.log文件;
2.1如何清空日志:
使用cat /dev/null > run.log
具体说明如下:
a.nohup java -jar XXX.jar &
使用这种方式运行的程序日志默认会输出到当前目录下的nohup.out文件,使用ctrl+c中断或者关闭窗口都不会中断程序的执行。
b.nohup java -jar xxx.jar >run.log &
我这里重定向到了run.log文件;
这种方式应用重新启动后,运行日志会自动清空;
在使用cat /dev/null >run.log清空日志后,原来的文件空间还在;
即虽然将内容清空了,但是下一次日志再写入时,原来的空间还是被占用,打开文件查看,发现之前的被空替代(内容位置还在);
如图:里面的空白就是替换后的null
这一点原因,具体可以看:
c.
nohup java -jar xxx.jar >>run.log & --追加形式(推荐的)
这种方式应用重新启动后,运行日志不会自动清空;
在使用cat /dev/null >run.log清空后,原来的文件空间全部清空;
这个才是我们需要的;这里 解释了上面的start.sh文件使用>>原因;
2.编写分割日志的splitRunLog.sh
#!/bin/bash
# Author:
# Last Update: 2020年2月27日13:53:51
# Description: run.log 日志分割
this_path=$(cd `dirname $0`;pwd) #根据脚本所在路径
current_date=`date -d "-1 day" "+%Y%m%d"` #列出时间
cd $this_path
echo $this_path
echo $current_date
do_split () {
[ ! -d runlogs ] && mkdir -p runlogs
split -b 20k -d -a 4 ./run.log ./runlogs/run-${current_date} #切分20k每块至runlogs文件中,格式为:run-xxxxxxxxxx
if [ $? -eq 0 ];then
echo "Split is finished!"
echo "Split is Failed!"
exit 1
do_del_log() {
find ./runlogs -type f -ctime +30 | xargs rm -rf #清理30天前创建的日志
cat /dev/null > run.log #清空当前目录的run.log文件
if do_split ;then
do_del_log
echo "run.log is split Success"
echo "run.log is split Failure"
exit 2
# crontab -e 添加定时任务:每周第一天的1点执行一次
#0 1 * * */1 /server/scripts/clearrun.sh &>/dev/null
#这里参考了:https://blog.51cto.com/ljohn/1909665
3.写入定时任务crontab,注意这里最好写绝对路径
打开crontab 文件,位置:
crontab -e
#添加如下指令,保存即可
# 16:26分执行
26 16 * * * /tpsys/applications/platformUpload/splitRunLog.sh &>/dev/null
#############################################################################
第一列 分钟: 1——59
第二列 小时: 0——23
第三列 日 : 1——31
第四列 月 : 1——12
第五列 星期: 星期0——6(0表示周天,1表示周一。。。)
第六列 要运行的任务命令(0表示键盘输入;1表示标准输出;2表示错误输出)默认值为1
前面五列有四种写法:
* 表示第几分钟(小时/日/月/星期)执行一次 ;
*/n 表示每n分钟(小时/日/月/星期)执行一次;
T1-T2 表示从T1到T2分钟(小时/日/月/星期)要执行任务;
a,b,c 表示a,b,c分钟(小时/日/月/星期)分别执行一次;
具体用法详见:
分割的文件:注意分割后的文件时不带后缀的,具体查询split指令的 -a指令;