6

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

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

提前致谢!

4

2 回答 2

18

对于 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 执行这个命令,而不是命令——可能更容易读/写 ^^)

于 2009-07-20T19:20:11.243 回答
0

“在 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..

于 2009-07-20T19:14:35.017 回答