![생성된 파일 이름을 postrotate 섹션에서 호출되는 쉘 스크립트에 전달하는 방법](https://linux55.com/image/225818/%EC%83%9D%EC%84%B1%EB%90%9C%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%84%20postrotate%20%EC%84%B9%EC%85%98%EC%97%90%EC%84%9C%20%ED%98%B8%EC%B6%9C%EB%90%98%EB%8A%94%20%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%20%EC%A0%84%EB%8B%AC%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
나는 bash에 대한 지식이 매우 부족하여 squid에 대해 다음과 같은 logrotate 구성을 가지고 있으며 이름에 이전 날짜가 포함된 생성된 로그 파일 이름(access-Ymd.log)을 다른 쉘 스크립트 명령에 전달하려고 합니다. Symfony를 호출합니다. 결과 파일의 이름을 인수로 사용합니다. 현재 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
후회전 부분에서 해결책을 찾았습니다.
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