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

Aer*_*oss 41 bash cron terminal

我正在设置一个 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
Run Code Online (Sandbox Code Playgroud)

等等。

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

Bru*_*ger 49

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

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

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

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

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

  • 必须小心 cronfile 中的 `date`:一些 cron(全部?)将 `%` 视为命令的结尾。(所以`$()` 不是问题)。您必须转义所有百分号:`... touch "/tmp/$(date +\%Y-\%m-\%d)"`(最好使用按字典顺序排序的日期格式) (24认同)
  • glenn jackman 是正确的:在上面的 crontab 条目中转义 '%' 字符是有效的。RHEL 5.0 crontab 条目如下所示:50 11 * * * touch "/tmp/backup.$(date +\%Y-\%m-\%d).sql" (2认同)

aso*_*ove 8

您应该可以使用date.
输入info dateman date了解详情。

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

yourcommand > filepathandnameprefix$(date +"\%d-\%m-\%Y").extension
Run Code Online (Sandbox Code Playgroud)