如何将生成的文件名传递给 postrotate 部分中调用的 shell 脚本

如何将生成的文件名传递给 postrotate 部分中调用的 shell 脚本

我对 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

相关内容