无法从脚本.sh

时间:2018-08-06 16:48:23

标签: linux mongodb ubuntu cron

有: 我创建了一个.sh脚本,其中正在创建mongodb数据库的备份。 当我创建备份时,一切都很好,问题在于它并没有消除以前的备份(我每天都消除5天前的备份)。 这是我的脚本:

#!/bin/bash
BACKUPS_DIR="/path/to/backups"
TIMESTAMP=`date +%d-%m-%y`
BACKUP_NAME="BACKUP-$TIMESTAMP"
mongodump --port 27017 --out $BACKUP_NAME
tar -zcvf $BACKUPS_DIR/$BACKUP_NAME.tgz $BACKUP_NAME
rm -rf $BACKUP_NAME
DATE_TO_DELETE=`date -d "$date -5 days" +%d-%m-%y`
FILE_TO_DELETE="BACKUP-$DATE_TO_DELETE"
rm -rf $FILE_TO_DELETE.tgz

当我使用运行脚本时 ./script_name.sh 一切正常。 当我将其添加到crontab时,它将创建备份,但不会从5天前删除备份。

感谢您的所有帮助。

1 个答案:

答案 0 :(得分:1)

您应该修改脚本,以确保从正确的目录运行rm -fr。否则,您可以删除您不想删除的内容(请问我我怎么知道...!)。 Crontab不会从脚本所在的目录中运行脚本。

因此,如果您这样做:

cd $(which script_name.sh)
./script_name.sh

一切都很好。但是crontab不执行cd。请注意,由于您在目标文件中指定了tar,因此$BACKUP_DIR命令的工作正常。

所有要说的做到这一点:

#!/bin/bash
BACKUPS_DIR="/path/to/backups"
TIMESTAMP=`date +%d-%m-%y`
BACKUP_NAME="BACKUP-$TIMESTAMP"
mongodump --port 27017 --out $BACKUP_NAME
tar -zcvf $BACKUPS_DIR/$BACKUP_NAME.tgz $BACKUP_NAME
rm -rf $BACKUP_NAME
DATE_TO_DELETE=`date -d "$date -5 days" +%d-%m-%y`
FILE_TO_DELETE="BACKUP-$DATE_TO_DELETE"

rm -rf $BACKUPS_DIR/$FILE_TO_DELETE.tgz

另一种可能性是使用find删除$BACKUPS_DIR中5天以上的所有文件。