2015-06-25 71 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腳本解決方法是最簡單的解決方案(儘管您可能希望在變量中捕獲'$?',然後在腳本末尾重複使用該值以「退出」,以便腳本在出現錯誤時異常退出)。 –