logrotate prerotate脚本没有得到要旋转的文件的名称

我在logrotate 3.12.2中的prerotate脚本有问题。 我在prerotate/endscript部分中指定的脚本没有接收到要作为第一个参数( $1 )旋转的文件的名称。

这是logrotateconfiguration:

 compress /external-logs/syslog { daily rotate 3 olddir OLD missingok prerotate /root/filter-syslog.sh endscript } 

这里是/root/filter-syslog.sh

 #!/bin/sh echo "log file subject to prerotate: $1" 

最后,这里是logrotate run的详细输出:

 reading config file /external-config/logrotate.conf olddir is now OLD Reading state from file: /external-logs/logrotate.state Allocating hash table for state file, size 64 entries Creating new state Handling 1 logs rotating pattern: /external-logs/syslog after 1 days (3 rotations) olddir is OLD, empty log files are rotated, old logs are removed considering log /external-logs/syslog Now: 2017-09-24 13:35 Last rotated at 2017-09-23 12:50 log needs rotating rotating log /external-logs/syslog, log->rotateCount is 3 dateext suffix '-20170924' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' renaming /external-logs/OLD/syslog.3.gz to /external-logs/OLD/syslog.4.gz (rotatecount 3, logstart 1, i 3), old log /external-logs/OLD/syslog.3.gz does not exist renaming /external-logs/OLD/syslog.2.gz to /external-logs/OLD/syslog.3.gz (rotatecount 3, logstart 1, i 2), old log /external-logs/OLD/syslog.2.gz does not exist renaming /external-logs/OLD/syslog.1.gz to /external-logs/OLD/syslog.2.gz (rotatecount 3, logstart 1, i 1), old log /external-logs/OLD/syslog.1.gz does not exist renaming /external-logs/OLD/syslog.0.gz to /external-logs/OLD/syslog.1.gz (rotatecount 3, logstart 1, i 0), old log /external-logs/OLD/syslog.0.gz does not exist log /external-logs/OLD/syslog.4.gz doesn't exist -- won't try to dispose of it running prerotate script log file subject to prerotate: renaming /external-logs/syslog to /external-logs/OLD/syslog.1 compressing log with: /bin/gzip 

在上面的输出中注意“ log file subject to prerotate: ”的行。 为什么不是行输出“ log file subject to prerotate: /external-logs/syslog ”而不是?

你没有把任何东西传递给你的shell脚本。 所以在你的/root/filter-syslog.sh $1没有值,因此没有打印任何东西。

回声“日志文件需要prerotate:$ 1”

为了使其工作,您必须在您的logrotateconfiguration中传递$1$@

 compress /external-logs/syslog { daily rotate 9 olddir OLD missingok prerotate /root/filter-syslog.sh $1 endscript }