我有一个Linux应用程序,该应用程序不断将日志记录信息写入日志文件,例如。/var/log/application.log
。由于应用程序不会自动旋转文件,因此该日志文件可能在几周内达到GB的大小,因此我希望能够正确旋转该文件
我这里主要关心的是,要旋转一个由应用程序始终打开的文件,我可能需要:
将文件移动到旋转形式
/var/log/application.log -> /var/log/application.log.2013-01-28
创建一个空的
/var/log/application.log
。Obs:至此,应用程序过程仍在写入/var/log/application.log.2013-01-28
更改应用程序进程的文件描述符以再次指向
/var/log/application.log
所以,对吗?如果是这样,我该怎么做?(主要是更改文件描述符部分)
如果我不是,正确的方法是什么,怎么做?
您需要清除文件还是仅旋转文件?
—
ewwhite
什么应用?该应用程序必须提供支持才能正确执行此操作。(否则,您可能会遇到一个非常丑陋的事情-附加到进程中,打开新文件,
—
David Schwartz 2013年
dup2
在旧文件上添加新的描述符,然后关闭新描述符。)
有趣的方式Schwartz。我很好奇看到它在行动,并且会玩一会儿。无论如何,该应用程序都在内部,并且我正在寻找更通用的解决方案。我喜欢kormoc的回答,顺便说一句
—
Bruno Polaco 2013年
@ewwhite我需要旋转它,我承受不起丢失日志数据的原因
—
Bruno Polaco 2013年