获取 logrotate 文件的名称?

获取 logrotate 文件的名称?

首先我要说的是,我对 Linux 和 bash 脚本非常陌生,只接触了 2 周,所以假设我什么都不知道!

出于开发原因,我需要将日志文件复制到另一个位置和名称,这是我的 logrotate 文件:

/pub/share/logs/results.txt {
    daily
    rotate 30
    dateext
    compress
    delaycompress
    missingok
    notifempty
    postrotate
        sh /pub/share/scripts/result_rotate.sh $1 > /dev/null
    endscript
}

bash 脚本很简单:

#!/bin/bash

date=$(date +%Y%m%d)
cp $1-$date /pub/share/reports/data.log

我不知道我是否将其放入脚本文件中,或者如果我可以在 postrotate 块中键入它,但目前这是可行的。

它传递要旋转的文件的名称,但在它已经使用日期扩展名重命名之后才执行此操作,因此是上面的日期代码。这是一种安全的方法吗?是否会出现无法正确匹配的情况?

答案1

是的,为什么不呢,可以直接写进去后旋转堵塞:

cp $1-$(date +%Y%m%d) /pub/share/reports/data.log >/dev/null

在更糟糕的情况下,例如今天的日期和后旋转 发布为在第二天运行,因此我们的cp命令将无法复制该文件。为此,您始终可以获得一天前的文件,而不是今天的日期轮换文件:

cp $1-$(date -d'-1day' +%Y%m%d) /pub/share/reports/data.log >/dev/null

或者当然您可以复制这两个文件,即今天的日期和昨天的日期文件。

相关内容