【发布时间】:2019-09-13 06:20:49
【问题描述】:
我有以下 logrotate 脚本
/path/to/folder {
daily
rotate 30
notifempty
sharedscripts
copytruncate
compress
dateext
preremove
if file --mime-type "$1" | grep -q gzip$; then
mkdir -p /path/to/archive/folder && cp $1 $_
fi
endscript
}
-
我想要达到的目标:-
在保留 30 天后删除日志文件之前,将其复制到另一个文件夹。
我在调试模式下运行这个 logstash 配置
logrotate -d $CONFIG_FILE
从日志看,轮换工作正常,但它甚至没有运行preremove 脚本。
我还没有在现场运行这个配置,因为我想在这样做之前对其进行测试。
logrotate 3.8.6 版
【问题讨论】:
-
请注意
preremove运行/bin/sh,您可能没有可用的$_(至少POSIX sh 似乎不需要它)。另外,请确保在任何地方引用"$1",并单引号'gzip$'。尝试添加调试输出,如echo blah >> /tmp/debug以查看脚本是否运行。 -
@BenjaminW。我尝试用
path/to/archived/folder替换$_- 仍然没有用。我还在 preremove 脚本中尝试了echo "testing"。它似乎没有运行。 -
我不确定
logrotate的标准输出在哪里——您是否尝试将其重定向到echo调试语句的文件? -
@BenjaminW。它似乎没有进入
preremove脚本。在preremove块之外放置回声会引发错误unknown option 'echo'。但是当它在preremove块内时,它不会抛出该错误。 -
老实说,我不确定。我会尝试在一些测试文件而不是真实日志上以非调试模式运行它。
标签: linux bash unix logging logrotate