我试图找到一种简单的方法来附加/写入日志,同时将日志修剪到合理的大小。我宁愿不只是永远追加文件,然后必须有一个清理日志脚本。我无法在不使用第二个文件作为临时文件的情况下如何优雅地完成这项工作。
我看过的东西供参考:
我已经阅读了高级脚本指南 http://tldp.org/LDP/abs/html/io-redirection.html
两个命令的组合输出: Bash - 如何将两个命令输出到文件?
理想情况下,我会有类似的东西(我知道这行不通)
(tail-n 1000 foo.log; ./foo.sh) > foo.log
Run Code Online (Sandbox Code Playgroud)
这将保留我正在进行的日志中的最后 1000 行,然后为当前运行的 foo.sh 附加我的新输出。
我想不出一种方法来使用附加重定向 >> 并限制原始文件,而不会将对 foo.sh 的调用包装在其他一些 bar.sh 中
tail -n 1000 foo.log > tmp.log
mv tmp.log foo.log
./foo.sh >> foo.log
Run Code Online (Sandbox Code Playgroud)
这看起来很笨拙。
也许我的答案是让 foo.sh 不依赖 STDOUT 作为发送日志消息的地方,而是直接打开文件。
跟进编辑:
普遍的意见是不建议这样做。我很欣赏的一个意见。但是,正在运行的服务器不在我的控制范围内,并且不会真正处于.... 警惕的管理员之下。它是一个盒子,许多不同的团体拥有盒子的一部分,但没有人负责盒子的整体健康状况。我可以让日志永远构建,并且在完整的时间里它可能无关紧要,但我想尽我所能来统治它,因为我知道最终的管理员不会做任何事情。因此,使用 crontab 运行 logrotate 对我来说是不合适的。我只是在寻找我可以用单个命令的有限点做的事情。