【问题标题】:File name issue in cron-jobcron-job 中的文件名问题
【发布时间】:2015-09-12 16:36:08
【问题描述】:

以下命令运行正常:

mysqldump -u root -proot db_name > /home/ronak/$( date +"%Y_%m_%d_%H_%M_%S" ).sql

但是,当我在crontab 中输入完全相同的命令时,我没有得到任何输出。我尝试使用test.sql 更改文件名,在这种情况下,我将在所需位置获取该文件。我认为date 中的crontab 有问题。

* * * * * root mysqldump -u root -proot db_name > /home/ronak/$( date +"\%Y_\%m_\%d_\%H_\%M_\%S" ).sql

【问题讨论】:

    标签: mysql linux apache cron mysqldump


    【解决方案1】:

    有些发行版不喜欢 cron 中的 $() 结构。要在 cron 中进行测试,请尝试触摸 /tmp 中的文件:

    * * * touch "/tmp/$(date +%Y-%m-%d).txt"
    * * * touch "/tmp/$(date +\%Y-\%m-\%d).csv"
    

    查看任一文件是否出现在 /tmp 中

    (a) 文件系统中出现touch之后的一个:

    在您的问题 cron 命令中,> 符号之后的文件名可能需要一个外部包装双引号。

    (b) 均未出现:

    创建一个 bash 脚本并在 cron 任务中触发它,因为它对日期有更大的影响:

    #!/bin/bash
    NOW=`/bin/date +"%Y%m%d-%H%M%S"`
    if [[ "$?" != "0" ]]; then
      NOW="date_not_great"
    fi
    
    mysqldump -u root -proot db_name > /home/ronak/$NOW.sql
    if [[ "$?" != "0" ]]; then
      echo "$0: backup failed with error code $?"
    fi
    

    【讨论】:

    • +1 以获得良好的故障排除建议。 Cron 遭遇了一个尴尬的设计决策,该决策与具有神奇含义的 % 标志有关。用反斜杠转义它们(iirc)并不太奏效,因为 cron 将反斜杠原封不动地传递给它假定的外壳,但这通常会做错事。 bash 脚本解决方法是最简单的解决方案(尽管您可能希望在变量中捕获 $?,然后在脚本末尾将该值重用于 exit,以便在发生错误时脚本异常退出)。
    猜你喜欢
    • 2023-03-18
    • 2018-08-15
    • 2015-12-05
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多