【问题标题】:Catalina.out not logging after edition by bash scriptCatalina.out 在 bash 脚本编辑后没有记录
【发布时间】:2015-02-13 21:39:40
【问题描述】:

这是一个带有默认日志配置的 tomcat7 安装,只有在我们重新启动服务器时才会推出 catalina.out。由于它是产品服务器,我们不能经常重新启动它。我们有大量进入该文件的条目,这导致我们的 catalina.out 在几天内增长得非常高,直到它消耗了整个磁盘空间。

由于我们不想更改日志配置,因为它是被人偶化的,并且我们需要创建 devops 票证和所有那些缓慢的东西,所以我编写了一个 bash 脚本,它通过 crontab 每 5 分钟运行一次,这将减少当达到限制时,日志文件减半,脚本如下:

 if [ $catalinaSize -gt $catalinaThreshold ]; then
  middle=$(wc -l $catalinaLoc | awk '{ print $1 }')
  middle=$(( $middle / 2 ))
  sed -i -e 1,${middle}d $catalinaLoc
  echo "+++ catalina.out was cut by half"

基本上,此脚本检查文件的当前大小并将其与阈值进行比较,然后使用 wc 和 awk 检索该文件中的行数,以便可以使用 sed 将文件减半。

我在其他环境中测试了该脚本并且它工作正常。问题是,在生产环境中成功运行了几天后,catalina.out 突然从几天前开始没有从 tomcat 获取任何日志条目。

我想到的解释是Tomcat由于减半操作而无法再写入该文件。

是否有可能知道是什么阻止了 Tomcat 写入该文件?

【问题讨论】:

    标签: linux bash logging tomcat7


    【解决方案1】:

    我怀疑是sed -i 造成了损害:在幕后,它将输出流写入临时文件,然后将临时文件移动到原始名称。我怀疑 catalina 持有的文件句柄不再指向任何文件。

    您必须找到一种方法来实际编辑文件,而不是替换它。这可能是sed 的有效替代品:

    printf "%s\n" "1,${middle}d" "wq" | ed "$catalinaLoc"
    

    切线,更简单的获取行数的方法:

    middle=$(( $(wc -l < "$catalinaLoc") / 2 ))
    

    当您重定向到wc 时,它不再打印出文件名。

    【讨论】:

      猜你喜欢
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 2018-10-29
      • 2012-06-02
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多