这段时间在给tomcat做日志分割,再使用定时任务去执行shell脚本时,发现切割后的日志文件老是被置空,手动执行shell脚本却没有任何问题。
下面为shell脚本内容
# 复制日志文件内容到新的文件中cp/home/work/tomcat/logs/catalina.out /home/work/tomcat/logs/catalina_`date -d '-1 days'+%Y%m%d`.log
# 清空tomcat默认日志输出文件echo"" > /home/work/tomcat/logs/catalina.out
在多次测试后,发现是复制日志还没完成时,就已经将清空日志的命令给执行了。导致直接将空日志给复制到每天的日志文件里去了。
因此这个问题就变成了如何在shell脚本执行完第一条命令完成后,在执行第二条。这个问题也挺常见的,经常出现于上一个命令对一个文件处理没有完成就进行了下一个命令对该文件进行操作的场景。
网上有很多方法,如:
① 在两条命令之间添加 &&
实测在这个场景中无效
②使用if else 或者 while,利用执行的结果去判断命令是否执行完成,然后进行下一步操作
觉得太过麻烦,没有进行测试
后续处理:
①分开使用两个shell脚本,然后分两次定时任务调用。
即将上一个shell脚本的两条命令分割成两个shell脚本,然后在定时任务里分别对两个shell脚本设定时任务执行即可。
②在shell脚本里使用延迟等待sleep(单条脚本服务过多可能依旧会发生日志置空问题)
# 复制日志文件内容到新的文件中cp/home/work/tomcat/logs/catalina.out /home/work/tomcat/logs/catalina_`date -d '-1 days'+%Y%m%d`.log
# 延迟等待3秒sleep 3
# 清空tomcat默认日志输出文件echo"" > /home/work/tomcat/logs/catalina.out
执行完上个命令后,延时等待相应时间再执行下一个命令
版权归原作者 pizssn 所有, 如有侵权,请联系我们删除。