我在我的专用服务器上设置了一个脚本,将我的所有Cpanel备份文件备份到Amazon S3,并且我每晚都通过cron运行它。
它昨晚完美运行并支持所有内容,但后来继续删除它备份的所有内容。它似乎与date
命令有关,因为如果我将脚本的“删除”部分拉出来并将其放入另一个文件并将其作为回显运行,我无法获得回显的日期正常。我一直收到“命令未找到”错误:
以下是备份脚本的完整代码:
#!/bin/bash
##Notification email address
_EMAIL=klawncare1212@gmail.com
ERRORLOG=/var/log/s3_backup_logs/backup.err`date +%F`
ACTIVITYLOG=/var/log/s3_backup_logs/activity.log`date +%F`
##Directory which needs to be backed up
SOURCE=/backup/cpbackup/daily
##Name of the backup in bucket
DESTINATION=`date +%F`
##Backup degree
DEGREE=4
#Clear the logs if the script is executed second time
:> ${ERRORLOG}
:> ${ACTIVITYLOG}
##Uploading the daily backup to Amazon s3
/usr/bin/s3cmd -r put ${SOURCE} s3://MK_Web_Server_Backup/${DESTINATION}/ 1>>${ACTIVITYLOG} 2>>${ERRORLOG}
ret2=$?
##Sent email alert
msg="BACKUP NOTIFICATION ALERT FROM `hostname`"
if [ $ret2 -eq 0 ];then
msg1="Amazon s3 DAILY Backup Uploaded Successfully"
else
msg1="Amazon s3 DAILY Backup Failed!!\n Check ${ERRORLOG} for more details"
fi
echo -e "$msg1"|mail -s "$msg" ${_EMAIL}
#######################
##Deleting backup's older than DEGREE days
## Delete from both server and amazon
#######################
DELETENAME=$(date --date="${DEGREE} days ago" +%F)
/usr/bin/s3cmd -r --force del s3://MK_Web_Server_Backup/${DELETENAME} 1>>${ACTIVITYLOG} 2>>${ERRORLOG}
以下是我正在测试的示例代码,它只是回显上面的日期代码:
#!/bin/bash
##Backup degree
DEGREE=4
#######################
##Deleting backup's older than DEGREE days
## Delete from both server and amazon
#######################
DELETENAME=$(date --date="4 days ago" +%F)
echo ${DELETENAME}
我做错了什么?每次我通过SSH在CentOS Linux服务器上运行这个小测试脚本时,都会出现以下错误:
“date --date = 4天前:找不到命令”
因此,插入“度”变量值没有任何问题。而且,如果我只是在SSH(date --date="4 days ago" +%F
)的提示符下运行相同的命令,它就像一个魅力,输出数据就像我期望的那样。
我做错了什么?
答案 0 :(得分:3)
当您从常规终端运行脚本时,您可能正在使用不同版本的date命令,而不是从脚本运行脚本,因为它们使用不同的路径。使用要使用的日期命令版本的完整路径,或者在脚本开头显式设置路径。
答案 1 :(得分:0)
mydate4=`date -d "4 days ago " +%F`