【问题标题】:Save multiple folders with logrotate使用 logrotate 保存多个文件夹
【发布时间】:2023-04-10 12:22:01
【问题描述】:

我正在尝试使用 logrotate 每天、每周和每月将我的文件夹(除了一些)保存在 /var/www 中。

我尝试在 postrotate 中做类似的事情

cd /var/www/
for i in $(ls -d */); do echo ${i%%/}; done | \
grep -Ev '(clients)|(conf)|(ispconfig)|(php-fcgi-scripts)|(webalizer)|(webmail)' | \
while read dirname; do \
    tar cvfz /my/backup/dir/"$dirname".tgz -C /var/www/"$dirname".com/web/ . \
done

因为我将添加许多网站,并且我认为每个网站都有一个特定的 logrotate conf 文件是一个错误来源。 当然这不起作用,因为 logrotate 等待一个且只有一个输出文件旋转,而我创建的 tgz 不会旋转。

有人知道如何干净/安全地做到这一点吗?

非常感谢。

【问题讨论】:

    标签: backup logrotate


    【解决方案1】:

    如果它可以帮助某人,这里我做了什么来保存我的 sql(过去 8 天、过去 4 周和过去 5 个月):

    /home/myuser/etc/backup/sql/d.sql.tgz {
      daily
      rotate 8
      nocompress
      create 640 myuser myuser
      dateext
      dateformat -%Y%m%d
      extension .sql.tgz
      postrotate
        cd /home/myuser/etc/backup/sql/
        #  --routines -R
        #  --events -E
        #  --comments -i
        rootPwd=myRootPassword
    
        mysql -uroot -p$rootPwd -e 'show databases' --disable-column-names | \
        grep -Ev '(performance_schema)|(information_schema)|(mysql)|(phpmyadmin)' | \
        while read dbname; do \
          mysqldump -uroot -p$rootPwd --single-transaction --dump-date -iER $dbname > "$dbname".sql; \
        done
    
        #
        tar -zcf d.sql.tgz *.sql
        rm *.sql
      endscript
    }
    
    /home/myuser/etc/backup/sql/w.sql.tgz {
      weekly
      rotate 4
      nocompress
      create 640 myuser myuser
      dateext
      dateformat -%Y%m%d
      extension .sql.tgz
      postrotate
        cd /home/myuser/etc/backup/sql/
        #  --routines -R
        #  --events -E
        #  --comments -i
        rootPwd=myRootPassword
    
        mysql -uroot -p$rootPwd -e 'show databases' --disable-column-names | \
        grep -Ev '(performance_schema)|(information_schema)|(mysql)|(phpmyadmin)' | \
        while read dbname; do \
          mysqldump -uroot -p$rootPwd --single-transaction --dump-date -iER $dbname > "$dbname".sql; \
        done
    
        #
        tar -zcf w.sql.tgz *.sql
        rm *.sql
      endscript
    }
    
    /home/myuser/etc/backup/sql/m.sql.tgz {
      monthly
      rotate 5
      nocompress
      create 640 myuser myuser
      dateext
      dateformat -%Y%m
      extension .sql.tgz
      postrotate
        cd /home/myuser/etc/backup/sql/
        #  --routines -R
        #  --events -E
        #  --comments -i
        rootPwd=myRootPassword
    
        mysql -uroot -p$rootPwd -e 'show databases' --disable-column-names | \
        grep -Ev '(performance_schema)|(information_schema)|(mysql)|(phpmyadmin)' | \
        while read dbname; do \
          mysqldump -uroot -p$rootPwd --single-transaction --dump-date -iER $dbname > "$dbname".sql; \
        done
    
        #
        tar -zcf m.sql.tgz *.sql
        rm *.sql
      endscript
    }
    

    这里是我为保存我的网站所做的(将自动保存新网站):

    /home/myuser/etc/backup/files/tmp {
      daily
      rotate 2
      nocompress
      create 640 myuser myuser
      dateext
      dateformat -%Y%m%d
      postrotate
        es=end""script
        backup_path=/home/myuser/etc/backup/files
        cd /var/www/
        for i in $(ls -d *.*/); do echo ${i%%/}; done | \
        while read dirname; do
    
          config_file=/home/myuser/etc/logrotate.d/generated/"$dirname"
    
          if [[ (! -f $config_file) && (-d $dirname/web/) ]]
          then
            touch $backup_path/d_$dirname.tgz
            touch $backup_path/w_$dirname.tgz
            touch $backup_path/m_$dirname.tgz
            chown myuser:myuser $backup_path/*
            cat > $config_file << DELIM
    $backup_path/d_$dirname.tgz {
      daily
      rotate 7
      nocompress
      create 640 myuser myuser
      dateext
      dateformat -%Y%m%d
      extension .tgz
      postrotate
        cd $backup_path/
        tar cfz d_$dirname.tgz -C /var/www/$dirname/web/ .
      $es
    }
    
    $backup_path/w_$dirname.tgz {
      weekly
      rotate 4
      nocompress
      create 640 myuser myuser
      dateext
      dateformat -%Y%m%d
      extension .tgz
      postrotate
        cd $backup_path/
        tar cfz w_$dirname.tgz -C /var/www/$dirname/web/ .
      $es
    }
    
    $backup_path/m_$dirname.tgz {
      monthly
      rotate 5
      nocompress
      create 640 myuser myuser
      dateext
      dateformat -%Y%m%d
      extension .tgz
      postrotate
        cd $backup_path/
        tar cfz m_$dirname.tgz -C /var/www/$dirname/web/ .
      $es
    }
    DELIM
          fi
        done
      endscript
    }
    
    include /home/kerawen/etc/logrotate.d/generated/
    

    您需要:

    • 将这些复制到 /etc/logrotate.d/
    • 将 myuser 更改为您的真实用户名
    • 创建 /home/myuser/etc/backup/files、/home/myuser/etc/backup/sql 和 /home/myuser/etc/logrotate.d/generated
    • touch /home/myuser/etc/backup/files/tmp, /home/myuser/etc/backup/sql/d.sql.tgz, /home/myuser/etc/backup/sql/w.sql.tgz和 /home/myuser/etc/backup/sql/m.sql.tgz
    • 键入“logrotate -f /etc/logrotate.d/your_script”以检查脚本是否运行良好

    【讨论】:

      猜你喜欢
      • 2019-06-18
      • 1970-01-01
      • 2017-01-03
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多