带有日期的 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
【讨论】:
但我使用的是来自RHEL7
的crontab
。你认为它会起作用吗?
你只需要尝试一下。 RHEL7 可能使用“cronie”,这可能允许与上面第一个解决方案显示的相同的变量分配。但是,无论如何,第二种解决方案适用于任何 cron 程序。
谢谢! @David White 无论如何我写了 shell 脚本,它的工作很棒
@DavidWhite,救了我。我确保具有 $(date..) 的命令在 shell 中运行,但想知道为什么它没有从 CRON 正确运行。现在我明白了 :) Windows -> Linux 用户的硬教训
很高兴它有帮助,@JoyGeorgeKunjikkuru!以上是关于带有日期的 Cron 文件名正在传递 Y_m_d 而不是实际日期的主要内容,如果未能解决你的问题,请参考以下文章