如何编写Bash脚本实现目录每日备份并自动化执行?
实现每日自动目录备份的步骤
1. 编写备份脚本
首先创建一个可执行的bash脚本,封装备份逻辑,同时处理日志和避免覆盖旧备份:
创建文件 /home/backup_script.sh,写入以下内容:
#!/bin/bash # 定义备份源、带日期后缀的目标文件和日志路径 BACKUP_SOURCE="/home/data" BACKUP_TARGET="/home/backup_$(date +%Y%m%d).tar.gz" LOG_PATH="/home/backup_exec.log" # 记录备份启动时间 echo "[$(date '+%Y-%m-%d %H:%M:%S')] 启动备份:源目录 $BACKUP_SOURCE" >> "$LOG_PATH" # 执行备份命令,输出重定向到日志 sudo tar -cvpzf "$BACKUP_TARGET" "$BACKUP_SOURCE" >> "$LOG_PATH" 2>&1 # 检查备份状态并记录结果 if [ $? -eq 0 ]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] 备份完成,生成文件:$BACKUP_TARGET" >> "$LOG_PATH" else echo "[$(date '+%Y-%m-%d %H:%M:%S')] 备份失败!请检查日志或命令参数" >> "$LOG_PATH" fi # 可选:自动清理7天前的旧备份,避免磁盘空间耗尽 find /home -name "backup_*.tar.gz" -mtime +7 -delete >> "$LOG_PATH" 2>&1
给脚本添加执行权限:
chmod +x /home/backup_script.sh
2. 配置sudo免密(解决定时任务权限问题)
由于备份命令使用了sudo,为避免定时任务执行时需要手动输入密码,需配置tar命令的免密sudo权限:
运行sudo visudo,在文件末尾添加一行(将your_username替换为你的实际用户名):
your_username ALL=(ALL) NOPASSWD: /usr/bin/tar
保存退出后,执行sudo tar --version测试,确认无需输入密码即可运行。
3. 设置crontab定时任务
通过crontab实现每日自动执行备份脚本:
编辑当前用户的crontab:
crontab -e
在文件末尾添加一行,设置每日凌晨2点执行备份(可按需调整时间):
0 2 * * * /home/backup_script.sh
crontab时间格式说明:分 时 日 月 周,上述配置表示每天凌晨2点0分执行脚本。
保存退出后,用crontab -l命令确认定时任务已添加。
内容的提问来源于stack exchange,提问作者Iman Jafari
相关产品推荐
相关产品推荐

