crondtab定時任務%字元無法識別的處理

一、背景

1.使用crond的定時任務時,編輯了以下的語句,每天0點執行定時任

crontab -e
service crond restart
0 0 * * * sh /root/backup/compress_backup.sh 2>&1 > /root/backup/log_`echo $(date  +%Y-%m-%d)`

2.查看定時任務的執行,語句沒有順利執行,出現問題

tail -5 /var/log/cron

 

3.本地執行命令是正常的

sh compress_backup.sh  > /root/backup/log_`echo $(date  +%Y-%m-%d)`

 

 二、問題原因

在crontab中%字元被認為是換行,所以你的命令中有%時,需要在crontab中要加\轉義

另外注意sh執行的腳本需要寫絕對路徑,否則也無法正確的執行

 

三、解決方案

 在crontab中要加\轉義

crontab -e
service crond restart
0 0 * * * sh /root/backup/compress_backup.sh 2>&1 > /root/backup/log_$(date +\%Y-\%m-\%d)

重啟查看定時任務的執行,語句正常

tail -5 /var/log/cron

查看文件備份成功且日誌正確生成