带有日期的 Cron 文件名正在传递 Y_m_d 而不是实际日期

Posted

技术标签:

【中文标题】带有日期的 Cron 文件名正在传递 Y_m_d 而不是实际日期【英文标题】:Cron filename with date is passing Y_m_d not actual date 【发布时间】:2016-07-24 20:08:39 【问题描述】:

每天使用 cron 将 mysql 备份到一个文件夹。因此尝试在 linux 服务器中使用以下代码安排 cron。 related post

0 0 * * * <username> mysqldump -u<mysql username> -p<mysql password> <database name> > /home/<username>/Db_BackUp/expense_$( date +"\℅Y_\℅m_\℅d" ).sql

上面的 cron 正在工作,但生成的文件名是这样的

expense_\.Y_\.m_\.d.sql

我需要 cron 将文件名创建为 expense_2016_04_05.sql

如何在 cron 中执行此操作?

related answer from SO Post

关于 cron 重启的补充信息SO Post

【问题讨论】:

【参考方案1】:

由于 cron 不是 shell,它不会像 shell 那样在 cron 行中执行 $() 包装器中的项目。然而,像 Vixie Cron 这样的一些 cron 将允许您在命令之前定义变量:

YMD=/bin/date +%Y_%m_%d
0 0 * * * /path/to/command > /home/username/Db_BackUp/expense_$($YMD).sql

如果这不起作用,您可能需要编写一个帮助脚本并改为通过 cron 运行 it。例如:

mysqldump_helper.sh

#!/bin/bash
YMD=`/bin/date +%Y_%m_%d`
/path/to/command > /home/username/Db_BackUp/expense_$YMD.sql

crontab

* * * * * /path/to/mysqldump_helper.sh

【讨论】:

但我使用的是来自RHEL7crontab。你认为它会起作用吗? 你只需要尝试一下。 RHEL7 可能使用“cronie”,这可能允许与上面第一个解决方案显示的相同的变量分配。但是,无论如何,第二种解决方案适用于任何 cron 程序。 谢谢! @David White 无论如何我写了 shell 脚本,它的工作很棒 @DavidWhite,救了我。我确保具有 $(date..) 的命令在 shell 中运行,但想知道为什么它没有从 CRON 正确运行。现在我明白了 :) Windows -> Linux 用户的硬教训 很高兴它有帮助,@JoyGeorgeKunjikkuru!

以上是关于带有日期的 Cron 文件名正在传递 Y_m_d 而不是实际日期的主要内容,如果未能解决你的问题,请参考以下文章

cron任务没有写入文件

通过 Cron 将当前日期附加到文件名?

Cron 作业的文件路径

cron 如何根据日期输出到新的日志文件?

管理由 cron 作业创建的日志文件

如何使用 cron 为日志输出条目添加时间戳?