2015-06-25 41 views
0

以下命令工作正常:文件名问题

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

但是,当我把相同的指令在crontab我没有得到任何输出。我试图用test.sql更改文件名,在这种情况下,我正在将文件放在所需位置。 crontab中的date我认为是错误的。

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

回答

1

一些发行版不喜欢cron中的$()构造。要在cron测试尝试,比如说,/ tmp目录触摸文件:

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

如果任一文件出现在见/ tmp目录

(一)出现在文件系统touch后一个:

也许在问题cron命令中的>符号后面需要一个外部包装双引号。

(二)既没有出现:

创建一个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 
+0

+1良好的故障排除建议。克朗遭遇了一个令人尴尬的设计决定,涉及具有魔法含义的'%'符号。使用反斜杠转义它们(iirc)并不完全正常,因为cron完整地将反斜杠传递给了它所假定的外壳,但这通常会做错误的事情。 bash脚本解决方法是最简单的解决方案(尽管您可能希望在变量中捕获'$?',然后在脚本末尾重复使用该值以“退出”,以便脚本在出现错误时异常退出)。 –