首先我要说的是,我对 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
或者当然您可以复制这两个文件,即今天的日期和昨天的日期文件。