我对 bash 的了解很差,所以我对鱿鱼有以下 logrotate 配置,并且我尝试将包含名称中的前一个日期的生成日志文件名(access-Ymd.log)传递给另一个调用 symfony 的 shell 脚本命令以结果文件的名称作为参数。目前我在 symfony 命令内生成预期的文件名,但我想从头开始生成它(后旋转部分)。
/var/log/squid/access.log {
su root root
daily
missingok
rotate 999
extension .log
dateext
dateyesterday
dateformat -%Y-%m-%d
nocompress
nomail
notifempty
create 0644 proxy proxy
sharedscripts
ifempty
#prerotate
#endscript
postrotate
test ! -e /run/squid.pid || test ! -x /usr/sbin/squid || /usr/sbin/squid -k rotate
# Este script se encarga de copiar el archivo rotado al directorio de respaldo local y al FTP configurados;
**resultingFilename=????????**
/var/www/html/squidmgr/run/rotarsquid.sh $resultingFilename > /dev/null 2>&1
endscript
}
/var/www/html/squidmgr/run/rotarsquid.sh:
rotatedLogFilename=$1
sudo -u www-data php -d memory_limit=256M /var/www/html/squidmgr/bin/console squidmgr:backups:squid-access-log-postrotate $rotatedLogFilename --notify-to-users-on-success --dump-to-db > /dev/null 2>&1
exit 0
第二个脚本使用 symfony 命令$rotatedLogFilename
作为参数调用。
答案1
您可以使用prerotate
脚本在轮换之前读取日志文件:
prerotate
/some/path/myscript "$1" >/dev/null 2>&1
endscript
各个脚本部分将日志文件的名称作为其第一个参数,并且可以在"$1"
.在prerotate
脚本中,您可以在轮换之前访问日志文件,因此可以通过使用该参数读取那里的日志文件(或复制它或您需要执行的任何操作)。
答案2
我在 postrotate 部分找到了解决方案:
postorate
YESTERDAYSTR=$(date -d "1 day ago" '+%Y-%m-%d');
RESULTINGFILENAME="access-$YESTERDAYSTR.log";
/var/www/html/squidmgr/run/rotarsquid.sh $RESULTINGFILENAME > /dev/null 2>&1
endscript