在奇数天运行 cronjob

在奇数天运行 cronjob

我目前每周每天都运行 MySQL 备份脚本:

0 1 * * 1 sh /root/mysql_monday.sh
0 1 * * 2 sh /root/mysql_tuesday.sh
0 1 * * 3 sh /root/mysql_wednesday.sh
0 1 * * 4 sh /root/mysql_thursday.sh
0 1 * * 5 sh /root/mysql_friday.sh
0 1 * * 6 sh /root/mysql_saturday.sh
0 1 * * 0 sh /root/mysql_sunday.sh

现在我想将备份保留一周以上,所以总共保留两周,以确保更加安全。

例如:我以为我可以在双数日星期一创建一个备份文件,然后在奇数日再次创建一个备份文件。

对于偶数天我可以使用:

0 1 */2 * 1 sh /root/mysql_monday_even.sh
0 1 */2 * 2 sh /root/mysql_tuesday_even.sh
0 1 */2 * 3 sh /root/mysql_wednesday_even.sh
0 1 */2 * 4 sh /root/mysql_thursday_even.sh
0 1 */2 * 5 sh /root/mysql_friday_even.sh
0 1 */2 * 6 sh /root/mysql_saturday_even.sh
0 1 */2 * 0 sh /root/mysql_sunday_even.sh

但是奇数天怎么办?

答案1

我在 unix.stackexchange 上发现了这一点:

您尝试的语法实际上是模棱两可的。根据月份的天数,有些月份会在奇数天运行,有些月份会在偶数天运行。这是因为计算方式是取所有可能性的总数并将它们分开。您可以通过手动指定日期范围并使用奇数或偶数天数来覆盖这种奇怪的行为。由于偶数天脚本永远不会在较长月份的第 31 天运行,因此使用 30 天作为偶数天的基数不会有任何损失,并且通过专门指定将其分为 31 天,您可以强制奇数天执行。

语法如下:

仅在奇数日运行:0 0 1-31/2 * * command

仅在双数日运行:0 0 0-30/2 * * command

您担心的月份天数不一致在这里并不重要,因为没有哪个月份的天数比这个多,而对于可怜的二月来说,日期范围永远不会与最后一天或两天相匹配,但将其列出也无妨。

来源:奇数/偶数 Cron

答案2

更好的解决方案肯定是使用专门设计用于每周、每月、每年保留的 MySQL 备份脚本?

Automysqlbackup 应该可以完美运行。

http://sourceforge.net/projects/automysqlbackup/

答案3

我用我自己的方式来做这件事 ;)

0 1 1,15,29 * * sh /root/mysql_monday.sh
0 1 2,16,30 * * sh /root/mysql_tuesday.sh
0 1 3,17,31 * * sh /root/mysql_wednesday.sh
0 1 4,18 * * sh /root/mysql_thursday.sh
0 1 5,19 * * sh /root/mysql_friday.sh
0 1 6,20 * * sh /root/mysql_saturday.sh
0 1 7,21 * * sh /root/mysql_sunday.sh
0 1 8,22 * * sh /root/mysql_monday2.sh
0 1 9,23 * * sh /root/mysql_tuesday2.sh
0 1 10,24 * * sh /root/mysql_wednesday2.sh
0 1 11,25 * * sh /root/mysql_thursday2.sh
0 1 12,26 * * sh /root/mysql_friday2.sh
0 1 13,27 * * sh /root/mysql_saturday2.sh
0 1 14,28 * * sh /root/mysql_sunday2.sh

答案4

相关内容