我有一个问题,我不能在任何地方find帮助或帮助。
我有一个程序(芹菜分布式任务队列),我有多个实例(工人)每个有一个日志文件(celery_worker1.log,celery_worker2.log)。
重要的错误被存储到数据库中,但是我喜欢在运行新操作时不时确定这些日志,以确保一切正常(日志级别较低)。
我的问题:这些日志正在占用大量的磁盘空间。 我想做的事情是:只有在需要的时候才能“看”日志(tail -f),而不用占用大量的空间。
我的想法直到现在:
有没有办法有一个非阻塞的命名pipe道,只是抛出时,标准输出,并抛出/ dev / null时不?
或者这种pipe道有技术上的困难吗? 如果有,他们是什么?
谢谢您的回答!
让每个工作人员登录到stdout,但将每个stdout连接到一个实用程序,该实用程序根据大小或时间自动后台打印和旋转日志。 multilog和svlogd就是这样的例子。 对于那些程序,你只需要尾随“当前”日志文件。
你说得对,logrotate不是你所遇到的问题的正确解决方案。
命名管道将无法正常工作。 充其量,你的作家可以填满他们的管道,然后丢弃随后的日志,这是你想要的行为的反面。
你可以尝试共享内存设备man:shm_overview或者其中的一些。 您需要将它们组织为循环缓冲区,以便它们能够存储您的日志的最后N个字节,并且每当您用读取器读取它时,它都会将所有内容输出到您的控制台。 这种方法被busybox的syslog / logread套装(见logread.c )所采用。