我有一个问题,我在 stackoverflow 或网络上的任何地方都找不到帮助。
我有一个程序(芹菜分布式任务队列),我有多个实例(工作者),每个实例都有一个日志文件(celery_worker1.log,celery_worker2.log)。
重要的错误存储到数据库中,但我喜欢在运行新操作时不时跟踪这些日志,以确保一切正常(日志级别较低)。
我的问题:这些日志占用了大量磁盘空间。我想做的事:只有在我需要的时候才能“观看”日志(tail -f),而不会占用大量空间。
到目前为止我的想法:
- 将日志输出到标准输出,而不是文件:这里不可能,因为我有很多工作人员输出到不同的文件,但我想一次将它们全部拖尾(tail -f celery_worker*.log)
- 使用 logrotate: 这对我来说是一个“OK”的解决方案。我不希望这是一项日常任务,但宁愿不为此投入一分钟的 crontab,而且服务器不是我的,因此这意味着在 admin-sys 方面有一些工作
- 使用命名管道:第一眼看起来不错,但我不知道命名管道(linux FIFO)在哪里阻塞。因此,当我不同时对所有管道进行尾部处理时,或者当我刚刚退出尾部处理时,记录器的写入操作将被阻止。
有没有办法拥有一个非阻塞的命名管道,它只会在有尾时抛出到标准输出,而在没有尾时抛出到 /dev/null?
或者这种类型的管道有技术困难吗?如果有,它们是什么?
谢谢您的回答!