利用脚本与LaunchAgent自定义Time Machine备份时机

    原本我设置了每小时自动备份,但因为一直开着 ZeroTier 并与家里路由器打通,结果在公司也会自动进行备份,网络速度极其缓慢,还长时间占用带宽。想通过自定义时间来控制备份,但默认选项并不支持。于是我打算写个脚本自动运行,最初想通过判断当前的 Wi-Fi 网络来识别环境,但发现 wdutil 需要 sudo 权限才能执行,操作较为麻烦。最终只能改用“时间 + IP 段”的方式来控制备份,设置成一个不常用的 IP 段,避免误触发。这样既能保留自动化,又能在公司网络环境下避免被动触发大流量的备份操作。

    首先把Time Mechine设置为手动,然后新建一个timemechine.sh,内容如下

#!/bin/zsh

# 如果你更习惯 bash,就把 #!/bin/zsh 改成 #!/bin/bash


# 1) 获取 en0 接口的 IP

#    如果你的网络接口不是 en0,可以改成 en1、en6 等实际接口名

IP=$(ipconfig getifaddr en0)


# 2) 获取当前时间,格式为 HHMM,例如 18:41 => 1841

CURRENT_TIME=$(date +%H%M)


# --- (可选)先检测 Time Machine 是否正在备份中 ---

backup_status=$(tmutil status | grep "Running = 1;")

if [ -n "$backup_status" ]; then

    echo "Time Machine 备份已在进行中,跳过此次触发。"

    exit 0

fi


# 3) 判断 IP 是否在 192.168.50.* 网段

if [[ "$IP" == 192.168.50.* ]]; then

    # 4) 判断时间是否在 18:40 (1840) 到 21:20 (2120) 之间

    if [ "$CURRENT_TIME" -ge 1840 ] && [ "$CURRENT_TIME" -lt 2120 ]; then

        echo "当前 IP 在 192.168.50.x 网段,且时间处于 18:40~21:20,开始执行 Time Machine 备份..."

        # 5) 开始 Time Machine 备份

        tmutil startbackup

        # 如果你想指定目标卷,可用:

        # tmutil startbackup --destination /Volumes/你的备份卷

    else

        echo "当前 IP 在 192.168.50.x 网段,但时间不在 18:40~21:20 之间,不执行备份。"

    fi

else

    echo "IP 不在 192.168.50.x 网段,不执行备份。"

fi

    然后加上执行权限 

chmod +x timemechine.sh

    添加一个配置文件  

vi ~/Library/LaunchAgents/com.example.autobackup.plist

    文件内容如下(自行修改timemechine.sh文件路径)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 

    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

<dict>

  <!-- 一个随意命名的标签 -->

  <key>Label</key>

  <string>com.example.autobackup</string>


  <!-- 要执行的脚本文件路径 -->

  <key>ProgramArguments</key>

  <array>

    <string>/Users/danfi/script/timemechine.sh</string>

  </array>


  <!-- 每隔 X 秒执行一次,这里是 300 秒=5分钟 -->

  <key>StartInterval</key>

  <integer>300</integer>


  <!-- 如果需要,你也可指定 RunAtLoad 在加载时就执行一次

  <key>RunAtLoad</key>

  <true/>

  -->


</dict>

</plist> 

     确保配置文件的拥有者和权限正确

chown danfi:staff ~/Library/LaunchAgents/com.example.autobackup.plist

chmod 644 ~/Library/LaunchAgents/com.example.autobackup.plist

    这样,定时任务就会按照 StartInterval(此处为 5 分钟)周期运行指定的脚本 ,周期可以自行定义。 

    使用 launchctl 命令将这个配置加载到当前用户的进程中:

launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.autobackup.plist

    至此,脚本就会每5分钟判断当前时间以及IP是否在有效范围内,然后执行备份。

评论

此博客中的热门博文

飞牛私有云OS相册、MT Photos、immich简单对比

飞牛私有云OS使用AList挂载天翼云盘

飞牛私有云OS相册、MT Photos、immich简单对比(二)