【问题标题】:Cron filename with date is passing Y_m_d not actual date带有日期的 Cron 文件名正在传递 Y_m_d 而不是实际日期
【发布时间】: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

【问题讨论】:

    标签: mysql linux cron crontab redhat


    【解决方案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!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多