让 crontab 更高效

让 crontab 更高效

我运行一个相对简单的服务器,上面有我维护的几个网站。

我设置了一个 crontab 来每天转储 mysql 并压缩 PHP。一周内,我轮流记录 7 个增量。然后我使用相同的 crontab 将它们从服务器复制到另一个服务器上。

以 mysql 位为例

16 3 * * tue mysqldump filename > /var/backups/b-Tuesday/filename.sql  
16 3 * * wed mysqldump filename > /var/backups/b-Wednesday/filename.sql
[etc]

重复此过程以对每个站点的 PHP 进行压缩,并再次对过程的 scp 部分进行压缩。

有没有办法让每个站点都每天执行一项作业,并将其保存到相关日期的备份文件夹中,而不是为每项备份安排 7 项作业?

答案1

如何使用日期调用中的函数?

16 3 * * * mysqldump filename > /var/backups/b-`date +%A`/filename.sql

答案2

尝试如下的 shell 脚本:

#!/bin/bash
/usr/bin/mysqldump filename | /usr/bin/bzip2 -c > /var/backups/b-`date +%A`/filename.sql.bup.bz2

这与我的 /etc/cron.daily/ 中的内容类似,但路径有所变化。我一直想用它做更多事情,但它确实有效,而且备份也压缩得很好!

我的日期格式实际上是date +%Y%m%d为了给我提供更多信息,但我会将备份保存超过 7 天。

答案3

作为替代方案,logrotate 命令将处理每天生成的文件的压缩、重命名(带日期)、删除等。您可以每天调用 dump 命令,也可以每天调用一次 logrotate。logrotate 配置文件允许您指定要轮换哪些文件以及如何处理它们。

答案4

切线相关,快照将为您管理每小时、每天、每周、每月的备份轮换。它巧妙地结合了 rsync 和硬链接来进行备份。

相关内容