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

在 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 中使用系统日期和/或时间作为某种变量吗?如果没有,您有什么建议来实现同样的目标?

答案1

你可以尝试这样的事情(正如下面格伦·杰克曼所说,你必须转义所有%字符):

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

查看您的特定 cron 是否会在 crontab 中将命令作为脚本运行,或者您是否需要编写一个脚本来将日期计算为字符串,然后运行 ​​mysqldump 命令。

在没有转义 的情况下%,Redhat Enterprise Linux 5.0 上的“cron”(我认为)一直给我关于找不到匹配的错误)。这是因为未转义之后的所有内容%都会发送到命令的标准输入。

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

答案2

您应该能够使用date.
输入info dateman date了解详细信息。

类似下面的内容可能适合您(根据您的需要更改日期格式)

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

答案3

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

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

答案4

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

相关内容