0

I am trying to save my folders (except some) in /var/www with logrotate daily, weekly and monthly.

I try, in the postrotate, to do something like

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

because I will add many websites and I think that to have a specific logrotate conf file per website is an error source. Of course this doesn't work because logrotate waits for one and only one output file to rotate, and the tgz I create will not be rotated.

Does anyone have an idea how to do it cleanly/safely?

Thank you so much.

1 Answers1

1

If it can help someone, here what I did to save my sql (last 8 days, last 4 weeks and last 5 months):

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

And here what I did to save my websites (will automatically save new websites):

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

You will need to:

  • copy those into /etc/logrotate.d/
  • change myuser to your real unser name
  • create /home/myuser/etc/backup/files, /home/myuser/etc/backup/sql and /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 and /home/myuser/etc/backup/sql/m.sql.tgz
  • type "logrotate -f /etc/logrotate.d/your_script" to check if the scripts runs well