You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:01:27