【问题标题】:Proper format for a mysqldump dynamic filename in a cron?cron 中 mysqldump 动态文件名的正确格式?
【发布时间】:2010-11-12 09:57:26
【问题描述】:

我设置了一个 crontab,每次尝试执行此操作时都会出错。它在外壳中工作正常。这是我尝试将日期自动插入数据库备份的文件名时使用的格式。有谁知道我需要使用什么语法来让 cron 让我将日期插入文件名?

mysqldump -hServer -uUser -pPassword Table | gzip > 
/home/directory/backups/table.$(date +"%Y-%m-%d").gz

提前致谢!

【问题讨论】:

    标签: cron mysqldump


    【解决方案1】:

    “在 shell 中工作但不能在 cron 中工作”的最典型原因是您尝试执行的命令不在 PATH 中。原因是从 cron 调用的 shell 不会加载与登录 shell 相同的文件。

    修复:为您尝试执行的每个命令添加绝对路径。

    我在你的命令中注意到的第二件事。运行 date 命令的语法看起来不太便携。将其更改为反引号,或运行将整个命令放入 shellscript(也可以使用它来设置路径)并从 cron 执行该脚本..

    编辑:

    在写我的原始回复期间,我的键盘布局没有反引号,所以请检查 Pascal 写的内容。

    以及您可以使用 shellscript 做什么的示例:

    将以下内容复制到/usr/local/bin/dumptable.sh

    #!/bin/sh
    /usr/bin/mysqldump --host=HOST --user=USER --password=PASSWORD DATABASE TABLE | /bin/gzip > /tmp/table.`/bin/date +"\%Y-\%m-\%d"`.gz
    

    然后把 /usr/local/bin/dumptable.sh 放到 cron..

    【讨论】:

      【解决方案2】:

      对于 crontab 的“命令”部分,这样的事情怎么样:

      mysqldump --host=HOST --user=USER --password=PASSWORD DATABASE TABLE | gzip > /tmp/table.`date +"\%Y-\%m-\%d"`.gz
      

      与 OP 不同的是日期格式的转义:

      date +"\%Y-\%m-\%d"
      

      (我使用了反引号——但这应该会有很大的不同)

      (其他解决方案是将您的原始命令放在 shell 脚本中,并从 crontab 执行这个命令,而不是命令 - 可能更容易读/写 ^^)

      【讨论】:

      • 附带说明:我几乎总是使用长选项,因此不经常使用命令行工具的人更容易理解/修改命令
      • 无论出于何种原因,我不得不为我的实例删除斜杠。不过谢谢你。 :3
      猜你喜欢
      • 1970-01-01
      • 2019-04-04
      • 2013-05-12
      • 2018-08-28
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      相关资源
      最近更新 更多