Mac 定时任务配置指南

📌 背景介绍

在日常使用 Mac 的过程中,我们常常需要定期执行某些脚本或程序,比如:

  • 每天备份一次数据库
  • 每小时监测系统性能
  • 每周清理日志文件
  • 每月归档工作目录

虽然 macOS 是基于 Unix 的系统,但与 Linux 的差异使得部分定时任务配置方式略有不同,因此本文将从使用 crontab 讲解如何在 macOS 上实现定时任务调度。

🧩 使用场景举例

使用场景 描述
🗂 数据自动备份 每天凌晨 2 点备份指定文件夹到外接硬盘
🧹 日志清理 每周清理系统或项目日志,释放磁盘空间
🔁 自动拉取代码 每小时拉取 Git 仓库内容,保持代码同步
📦 本地部署脚本自动化 每月运行一次部署脚本,生成报告或归档内容

⚙️ 配置方法

使用 crontab

1、 编辑当前用户的 crontab 文件

1
crontab -e

2、 添加定时任务语法

1
* * * * * /path/to/command

从左到右,每个 * 对应字段如下:

字段 含义
分钟(0-59) * 任意值
小时(0-23)
日期(1-31)
月份(1-12)
星期(0-7) 0 和 7 都是星期天

示例:每天凌晨 2 点执行备份脚本

1
0 2 * * * /Users/yourname/scripts/backup.sh

3、 查看当前 crontab 任务

1
crontab -l

⚠️ 注意事项:

  • 使用绝对路径,尤其是可执行文件和脚本路径。
  • 环境变量可能与终端不同,可在脚本顶部加入:
1
2
#!/bin/bash
source ~/.zshrc # 或 ~/.bash_profile

真实案例

Mac在共享目录操作文件时,会自动生成一堆隐藏文件,这些文件在其他平台如Windows是用不到的,看着还碍眼,因此可以加个定时任务,清理指定目录下的._隐藏文件。

1、编写脚本

vim ~/clean_appledouble.sh

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

# 要清理的路径
TARGET_DIR="/Volumes/YourSambaShare"

# 删除 ._ 开头的文件并记录日志
/usr/bin/find "$TARGET_DIR" -type f -name "._*" -delete

# 保存并退出,然后添加执行权限:
chmod +x ~/clean_appledouble.sh

2、配置定时任务

打开终端,执行:

crontab -e

添加如下行:

1
0 1 * * * /Users/你的用户名/clean_appledouble.sh >> /tmp/clean_appledouble.log **2**>**&1**

3、添加 cron 到“全盘访问权限”

打开系统设置(System Settings)→ 左侧点击 “隐私与安全性”(Privacy & Security)。

在右侧找到并点击 “全盘访问权限”(Full Disk Access)。

点击下方的 + 按钮,弹出文件选择窗口

在弹出的选择器中,按下快捷键:

Command + Shift + G

然后输入路径:

/usr/sbin/cron

选中 cron 文件并确认添加。

PS:如果不添加权限,当cron执行时,就会打印日志:find: /Volumes/<你的共享目录>: Operation not permitted 表明 cron 执行 find 命令时由于权限问题无法访问该目录。