여러 디렉터리에 대해 logrotate를 정의할 때 사후 회전이 몇 번 실행됩니까?

여러 디렉터리에 대해 logrotate를 정의할 때 사후 회전이 몇 번 실행됩니까?

데이터베이스 백업 순환을 위해 다음과 같은 구성이 있습니다. 두 개의 /var/mysql_backup/data/하위 디렉터리 와 db1.db2

/var/mysql_backup/data/*/db.sql.gz {
    daily
    rotate 7
    nocompress
    notifempty
    missingok
    create 640 root root
    dateext
    dateformat _%Y_%m_%d_%s
    extension .sql.gz
    
    postrotate

        PATH=/var/mysql_backup/data/
        MYSQL_USER=USER
        MYSQL_PASS='PASS'
        MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
        MYSQLDUMP_OPTIONS=" --single-transaction --quick"

        #Backup for db1
        mysqldump ${MYSQL_CONN} ${MYSQLDUMP_OPTIONS} db1  > ${PATH}/db1/db.sql
        gzip -9f ${PATH}/db1/db.sql

        #Backup for db2
        mysqldump ${MYSQL_CONN} ${MYSQLDUMP_OPTIONS} db2  > ${PATH}/db1/db.sql
        gzip -9f ${PATH}/db2/db.sql
    endscript
}

mysqldump내 질문은: gzip데이터베이스당 한두 번 실행합니까? 두 번 실행되는 경우 어떻게 한 번 실행되도록 합니까?

노트: db1과 db2에 대한 구성을 별도로 정의할 수 있다는 것을 알고 있습니다. 하지만 저는 더 깨끗한 솔루션을 찾고 있습니다.

답변1

sharedscripts설정되지 않은 경우 회전된 모든 파일에 대해 실행됩니다. 그런 다음 하나 이상의 회전이 발생하면 한 번만 실행됩니다. 변수를
덮어쓰지 마세요 PATH! 을 추가 nocreate하고 sharedscripts루프를 추가했습니다. 덤프가 한 단계로 생성되고 압축되었습니다.

/var/mysql_backup/data/*/db.sql.gz {
    daily
    rotate 7
    nocompress
    notifempty
    missingok
    create 640 root root
    dateext
    dateformat _%Y_%m_%d_%s
    extension .sql.gz
    nocreate
    sharedscripts
    postrotate
        mysql_user=USER
        mysql_pass='PASS'

        for db in db1 db2; do
            mysqldump -u"$mysql_user" -p"$mysql_pass" --single-transaction --quick "$db" |
                gzip -9f > "/var/mysql_backup/data/$db/db.sql.gz"
        done
    endscript
}

관련 정보