我有一个 crontab 设置,每次我尝试这样做时都会出错。它在外壳中工作正常。这是我尝试将日期自动插入数据库备份的文件名时使用的格式。有谁知道我需要使用什么语法来让 cron 让我将日期插入文件名?
mysqldump -hServer -uUser -pPassword Table | gzip >
/home/directory/backups/table.$(date +"%Y-%m-%d").gz
提前致谢!
对于 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 执行这个命令,而不是命令——可能更容易读/写 ^^)
“在 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..