我使用 centos 7
我有以下脚本来复制特定文件夹并让它称为源
每半小时发送到名为 Destination 的目标文件夹
并且我希望源文件夹在目标文件夹下命名为 Source+currentdate
我应该把这个脚本放在哪里每半小时执行一次
Today=$(date +"%Y-%m-%d-%H%M")
cd /
BACKUP_PATH='Destination'
cd ${BACKUP_PATH}
mkdir ${Source}.{Today}
我的脚本有什么问题
答案1
我将提供一个很久以前编写的脚本。您可以随意使用它。此 bash 脚本将获取一个文件夹并将其压缩为 tar.gz 并将其放入备份文件夹中。
#!/bin/bash
TIME=`date +%b-%d-%y` # This Command will add date in
# Backup File Name.
FILENAME=backup-$TIME.tar.gz # Here i define Backup file name
format.
SRCDIR=/opt/files/ # Location of Important Data
# Directory (Source of backup).
DESDIR=/opt/backups # Destination of backup file.
tar -cpzf $DESDIR/$FILENAME $SRCDIR
然后将其保存为类似
/usr/bin/backup.sh
并确保使用 chmod 允许系统运行该命令
chmod +x /usr/bin/backup.sh
要使脚本每半小时运行一次。您需要配置 crontap。一种方法是运行此命令。
crontab -e
并添加以下行
30 * * * * /usr/bin/backup.sh
希望这对你有帮助 :)
答案2
如果你不想有任何复杂性,你可以直接将这一行添加到 crontab 中:
/usr/bin/tar czvf /destination/dir/backup-$(date +%Y-%m-%d.%H_%M).tar /dir/to/backup
您还可以制作一个按周轮换的简单日志文件
#!/bin/bash
# Date command expands to the day of week in cron format
LOG=/var/log/backup.$(date +%w).log
# Let's check if the log file is old, and if it is, we will empty before starting logging again
# If day of the last backup not equal to today you put nothing to log (so you empty it)
if [[ $(tail -n1 $LOG | awk '{print $3}' ) != $(date +%d) ]]; then
: > $LOG
fi
# Then you backup. This date command will format name as backup-YEAR-MONTH-DAY.HOUR_MINUTE.tar.gz
tar czvf /destination/dir/backup-$(date +%Y-%m-%d.%H_%M).tar.gz /dir/to/backup
# This conditional redirects the echo to log file
if [[ $? == 0 ]]; then
echo "$(date) OK: Backup completed succesfully" >> $LOG
else
echo "$(date) ERROR: Backup failed" >> $LOG
fi
生成的日志文件将类似于 backup.0.log、backup.1.log 等等...