我正在使用一个系统,我想使用logrotate的dateext函数(或其他方式)在日志文件旋转时添加date。 但是在这个系统中,重要的是不要logging日志,dateext将覆盖任何现有的文件(如果logrotate每天被调用两次,将会发生这种情况)。
有一个可靠的方法来防止dateext覆盖现有的文件,而是做另一个文件? 可以接受的是,不发生旋转,或者使用不太可预测的名称创build文件(具有额外数字的date,或时间或某物)。
dateext支持%s格式说明符 – 以秒为单位的Unix纪元时间。
如果将dateformat设置为.%Y-%m-%d.%s ,它将如下所示:
logfilename.2012-12-11.13572638495
这种情况每秒都在变化,所以两个相同文件的机会是非常遥远的。
您可以使用prerotate / endscript来确保没有您要使用的名称的文件,但是如果您担心在任何奇怪的时间发生旋转,这可能会非常棘手。 最糟糕的情况是同一个文件同时运行两次(第一次完成之前第二次启动),如果两者都确定没有名称冲突,则会覆盖另一个文件。
更简单的方法可能是更改旋转的文件名以包含更精确的date,例如在时间戳中包含纳秒。 这应该使名称冲突的可能性很小。 如果你想确保没有名称冲突使用mktemp,但是你会得到“难看”的名字。 这种名称改变的逻辑应该转到logrotate config的pretrateate / endscript部分。