it-swarm.cn

在Cron脚本中使用系统日期/时间

我正在设置一个Cronjob,它将备份服务器中已有的MySQL数据库,但是我不希望它继续一遍又一遍地覆盖相同的文件。相反,我希望有一系列备份可以自动选择。例如:

## Cronjob, run May 21st, 2011:
mysqldump -u username -ppasword database > /path/to/file/21-03-2011.sql

## SAME Conjob, run May 28th, 2011:
mysqldump -u username -ppasword database > /path/to/file/28-03-2011.sql

等等。

有什么方法可以将系统日期和/或时间用作Cronjob中的某种变量?如果没有,您对实现相同目标有什么建议?

38
AeroCross

您可以尝试这样的操作(如下面的glenn jackmann所述,您必须转义所有%个字符):

15 11 * * * touch "/tmp/$(date +\%d-\%m-\%Y).sql"

要查看您的特定cron是否会将命令作为脚本本身从crontab中运行出来,或者是否需要编写一个以字符串形式确定日期的脚本,然后运行mysqldump命令。

不转义%,在Redhat Enterprise Linux 5.0上的“ cron”(我认为)一直给我有关找不到匹配的)。这是因为未转义的%发送到命令的标准输入。

我也建议您使用ISO8601日期格式(yyyy-mm-dd,即%F)来使文件名按词法排序时按日期排序。

46
Bruce Ediger

您应该可以使用date
输入info date 要么 man date了解详情。

类似以下内容可能适合您(将日期格式更改为您的需要)

yourcommand > filepathandnameprefix$(date +"\%d-\%m-\%Y").extension
7
asoundmove

为了使这样的命令正确运行,我们将必须转义%,然后它将按预期运行。

参见: http://www.ducea.com/2008/11/12/using-the-character-in-crontab-entries/

4
Édouard Lopez

这是我使用的bash脚本:

#!/bin/bash
mysqldump -u user1 -p DatabaseName | gzip > BackupFolder/backup`date +%F_%T`.sql.gz

文件如下:

backup2011-03-02_15:16:46.sql.gz

将Cron作业指向此位置,使其每晚或您喜欢的任何时间运行。

1
user5319

编写一个小的包装器脚本,该脚本利用date命令并调用您的备份命令。

#!/bin/bash
NOW=`/bin/date +"%m%d%Y-%H%M%S"`
if [[ "$?" != "0" ]]; then
 NOW="UNKNOWN_DATE"
 fi
mysqldump -u username -ppassword database > /path/to/file/$NOW.sql
if [[ "$?" != "0" ]]; then
 echo "$0: backup failed with error code $?"
 fi
0
LawrenceC