複数のディレクトリに対してlogrotateを定義すると、ポストローテーションは何回実行されますか?

複数のディレクトリに対してlogrotateを定義すると、ポストローテーションは何回実行されますか?

データベースのバックアップ循環のために、次の構成があります。 2つの/var/mysql_backup/data/サブディレクトリとdb1db2

/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データベースごとに1〜2回実行しますか? 2回実行された場合、どのように1回実行するのですか?

ノート:db1とdb2の構成を別々に定義できることを知っています。しかし、私はよりクリーンなソリューションを探しています。

ベストアンサー1

sharedscripts設定されていない場合は、回転したすべてのファイルに対して実行されます。その後、1つ以上の回転が発生した場合、一度だけ実行されます。変数を
上書きしないでくださいPATH。を追加し、nocreateループsharedscriptsを追加しました。ダンプが 1 段階で生成され圧縮されました。

/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
}

おすすめ記事