1

我在我的专用服务器上设置了一个脚本,将我所有的 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=4 天前:找不到命令”

因此,插入“度”变量值没有任何问题。而且,如果我只是简单地在 SSH ( date --date="4 days ago" +%F) 的提示符下执行相同的命令,它就像一个魅力一样,可以像我期望的那样输出数据。

我究竟做错了什么?

4

2 回答 2

3

当您从常规终端运行脚本时,您可能会选择不同版本的 date 命令,而不是从脚本运行它,因为它们使用不同的路径。使用您要使用的日期命令版本的完整路径,或者在脚本开头显式设置路径。

于 2012-05-11T17:50:01.137 回答
0
mydate4=`date -d "4 days ago " +%F`
于 2013-11-26T07:07:20.883 回答