我有一个crontab设置,每次尝试时都会出错。它在shell中运行良好。当我尝试将日期自动插入数据库备份的文件名时,这是我正在使用的格式。有没有人知道我需要用来让cron让我在文件名中插入日期的语法?
mysqldump -hServer -uUser -pPassword Table | gzip >
/home/directory/backups/table.$(date +"%Y-%m-%d").gz
提前致谢!
答案 0 :(得分:17)
对于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执行此命令,而不是命令 - 可能更容易读/写^^)
答案 1 :(得分:0)
“在shell中工作但在cron中工作”的最典型原因是您尝试执行的命令不在PATH中。原因是从cron aint调用的shell加载与登录shell相同的文件。
修复:为您尝试执行的每个命令添加绝对路径。
我在你的命令中注意到的第二件事。运行date命令的语法看起来不太便于携带。将其更改为反引号,或运行将整个命令放到shellscript(也可以使用它来设置路径)并从cron执行该脚本..
编辑:
在写我的原始回复期间,我的键盘布局没有反引号,所以检查Pascal写的是什么。
你可以用一个shellcript做的例子:
将以下内容复制到/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 ..