macos定时任务应优先使用launchd:用户级用launchagents(支持gui、钥匙串,存于~/library/launchagents),系统级用launchdaemons(需root权限、支持合盖唤醒,存于/library/launchdaemons);务必用绝对路径、正确配置startcalendarinterval或pmset唤醒,并通过log show排查日志。
macos 系统服务的定时执行,核心依赖 launchd 框架——这是 apple 官方推荐且唯一能可靠支持合盖睡眠后唤醒执行、低功耗调度、用户/系统级分离的机制。cron 在 macos 中已被明确弱化,不支持唤醒、易被挂起,不建议用于关键任务。
用 LaunchAgents 设置用户登录后定时运行(最常用)
适合脚本需访问用户环境(如桌面、钥匙串、iCloud 文件)、由当前用户触发的场景,比如每日备份、日志清理、API 同步等。
- 脚本必须有可执行权限:
chmod +x /path/to/your/script.sh - 配置文件存于:
~/Library/LaunchAgents/com.yourname.task.plist - 关键字段用
StartCalendarInterval设定具体时刻(如每天凌晨2点):<key>Hour</key><integer>2</integer><br><key>Minute</key><integer>0</integer>
- 加载生效:
launchctl load ~/Library/LaunchAgents/com.yourname.task.plist - 立即测试:
launchctl start com.yourname.task
用 LaunchDaemons 设置系统级定时任务(需合盖唤醒或无人值守)
适用于服务必须在用户未登录、甚至 Mac 合盖休眠时也能准时唤醒并执行,例如远程监控、自动关机保护、后台数据采集等。
部署和使用军舰的 macOS Automator 自动化服务集合。包含 5 个实用工作流:PDF转JPG、PNG重命名并转JPG、图像拼接、解压RAR、顺序命名图像文件。一键安装所有服务到 ~/Library/Services/ 目录。使用场景:(1) "安装我的自动化服务",(2) "部署所有 Automato...
- 配置文件路径:
/Library/LaunchDaemons/com.yourname.service.plist - 必须以 root 权限保存,且 plist 中需含
RunAtLoad和KeepAlive(按需),同时启用AbandonProcessGroup避免子进程残留 - 设置开机即载入:
sudo launchctl load /Library/LaunchDaemons/com.yourname.service.plist - 要确保唤醒成功,建议搭配
wakeorpoweron的 pmset 调度(如提前1分钟唤醒)
避免踩坑的关键细节
很多定时失败不是因为配置错,而是忽略了 macOS 的电源与安全限制:
- 脚本中所有命令请写绝对路径(
/usr/bin/python3,而非python3),launchd 不继承 shell PATH - 若脚本调用 GUI 工具(如 osascript),LaunchAgents 可用;LaunchDaemons 默认无 GUI 会话,需额外配置
SessionCreate或改用其他方式 - 涉及钥匙串、文件保险箱、全盘加密时,首次启动可能需手动解锁一次,后续才能静默运行
- 用
log show --predicate 'process == "launchd"' --last 1h查看最近调度日志,比猜更有效
不推荐但偶尔可用的替代方案
仅作补充了解,非主力推荐:
- pmset repeat:专用于电源状态切换(开机/睡眠/关机),不能执行任意脚本;适合纯硬件调度,比如“每天8点开机+23点关机”
- crontab:macOS 仍兼容,但任务在睡眠期间跳过、不唤醒、无 session 上下文,仅适合服务器类常开设备上的简单轮询
- 快捷指令自动化:图形化友好,但依赖“快捷指令”App 前台运行或特定触发条件(如到达某地、连接Wi-Fi),无法精确到秒或保障后台执行










