【问题标题】:Keep log file of shell script execution until past few days将 shell 脚本执行的日志文件保留到过去几天
【发布时间】:2011-07-20 22:06:10
【问题描述】:

我在 unix bok 上附加了标准输出和 shell 脚本执行的错误,如下所示

/home/mydir/shellScript.sh >> /home/mydir/shellScript.log 2>&1

现在我想知道一种方法可以让日志最多回溯 30 天,否则日志文件的大小将继续增加。 如果有人可以提供相同的建议,将不胜感激。

【问题讨论】:

  • 为什么不在每个日志条目上加上一个日期,并在写入时读取最后一个日期,如果超过 30 天,将文件截断到该日期,然后追加?跨度>

标签: unix shell standard-error


【解决方案1】:

这种思考一般是用logrotate之类的工具来完成的。

例如,使用 Apache 的日志,我已经看到它曾经:

  • 每天一次,将当前文件移动到另一个文件(每天有一个日志文件),压缩前一天的结果文件
  • 删除超过 1 周的存档文件

所以,我想你也许可以用它来得到你想要的。

【讨论】:

  • 任何关于 logrotate 的参考资料最好带有可以帮助我快速上手的示例。
【解决方案2】:

这是一个长时间运行的脚本(例如守护程序)吗?还是它做了什么然后迅速退出?您可以根据今天的日期动态构建日志文件的名称,以便在日期更改时生成一个新文件:

#/bin/sh
now=`date +%F`
/home/mydir/shellScript.sh >> /home/mydir/shellScript-$now.log 2>&1
previous=`date --date='30 days ago' +%F`
rm -f /home/mydir/shellScript-$previous.log 2>&1

(添加过时的日志删除)。

【讨论】:

  • 有趣!但是我需要在 crontab 文件中添加这个条目。
  • 没有理由你不能在另一个 shell 脚本中拥有它,你添加到 crontab 中。一个脚本可以轻松调用另一个脚本。
  • 日志文件不会一直这样堆积吗?我必须清除它们吗?
  • 他们会,你必须删除旧的,这也可以在同一个 shell 脚本中完成。 date 命令可以使用相关命令,例如 date --date='30 days ago',您可以从中构建旧的日志文件名并将它们 rm。
  • 您能否编辑您的初始回复并在一个脚本中显示所有内容,以一周为例。那肯定会有所帮助!
【解决方案3】:

Pascal MARTIN 是正确的 - 将配置文件放入 /etc/logrotate.d 是一件简单的事情,或者在文件 /etc/logrotate 的末尾添加一个条目,因为大多数 UNIX 系统都包含logrotate。这是一个非常容易理解的配置文件,大约需要 5 分钟。在手册页上了解。我推荐它作为最简单和最可维护的解决方案。

【讨论】:

    【解决方案4】:

    您的问题没有很多上下文。

    我同意所提供的两种解决方案。

    我还将向您指出我关于命名和管理日志文件的 2 篇相当冗长的 ;-) 论述。

    Bash piping output and input of a program

    command line wisdom for 2 panel file manager user

    我希望这些帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 2012-11-12
      • 2015-10-18
      • 2018-09-01
      相关资源
      最近更新 更多