为了不影响部署在linux服务器上的应用系统正常运行,一般情况下都需要将系统运行日志进行分割,但是很多方法都是遵循:" 添加定时任务 先复制压缩 再清空原日志文件" 的思路,压缩一般都是没问题,但是在清空原日志文件时会遇到执行清空命令后原日志文件大小仍不改变:
例如:
采用 echo "" > nohup.out
采用 cat /dev/null > nohup.out
采用 cp /dev/null nohup.out
采用 logrotate 工具等方法 将nohup方式运行重定向输出日志文件分割后
通过 ll 查看日志文件大小 日志文件大小并未变小仍是分割前的大小
通过 du -sh 查看会发现日志文件变小了
这种现象的原因是由于在 nohup 重定向输出启动时 采用了 ">" 清空重定向的方式 而不是 ">>"追加重定向的方式
通过修改启动文件的nohup重定向输出方式为 追加JAVA_CMD="nohup $JAVA_HOME/bin/java $JAVA_OPTS $APP_MAINCLASS >execute.log 2>&1 &"
echo "" > nohup.out
这样之后 nohup.out的大小就会改变,从0开始增长了也达到了分割日志的目的
今天再生产上就发现了一个问题,没有使用追加导致日志被清空之后,仍旧会显示原来大小.
我这边尝试了 cat /dev/null > execute.log
但是有新日志打入之后 ll -h日志文件又会显示原来大小
修改如下之后 的确没问题了
JAVA_CMD="nohup $JAVA_HOME/bin/java $JAVA_OPTS $APP_MAINCLASS >>execute.log 2>&1 &"
以后脚本还是稳一点
先cat /dev/null > execute.log
然后再追加
nohup $JAVA_HOME/bin/java $JAVA_OPTS $APP_MAINCLASS >>execute.log 2>&1 &