壳文本
Cron 是为始终在线的 Unix 服务器而设计的
在我职业生涯的早期,我常常会因为那些老手们总是用“只要创建一个定时任务就行了”来搪塞每一个自动化问题而感到恼火。
Cron 的历史可以追溯到 Unix 的早期。它简单、实用但可靠:每分钟检查一次文本文件,如果文件中的某一行与当前时间匹配,则运行相应的命令。和大多数 Unix 工具一样,它非常好用——前提是你要先学会它那晦涩难懂的调度语法。
例如:
0 3 * * * /Users/amerpie/scripts/backup.sh
对于 cron 任务来说,这意味着:每天凌晨 3 点运行此脚本。
Cron 是为服务器机房中的机器设计的——这些机器 24/7 全天候运行,连接到稳定的网络,并且很少进入睡眠状态。
macOS 笔记本电脑……并非如此。
核心问题在于 cron 完全不具备情境感知能力。它既不知道也不关心:
- 您已登录
- 网络可用
- 笔记本电脑处于睡眠状态
- macOS 自 1993 年以来没有任何改变。
- 现代功能,例如沙盒、节能模式或系统完整性保护,都已存在。
Cron 只会按计划运行。如果你的 Mac 在凌晨 3 点处于睡眠状态,那就没办法了。这种限制使得 Cron 并不适合大多数实际的 Mac 自动化场景。
这就是我们推出的原因
20 多年前,苹果在 OS X 10.4 (Tiger) 中引入了launchd ,以取代 cron 和一大堆其他遗留服务。
与 cron 不同,launchd 真正理解现代 Mac 环境。它可以处理:
- 启动和停止应用程序
- 运行后台任务
- 调度作业
- 管理守护进程
- 响应系统事件
最重要的是,launchd 的功能并不局限于“此时运行”。它可以根据状态和上下文触发任务,包括:
- 具体时间或时间间隔
- 系统启动
- 用户登录
- 文件或文件夹更改
- 网络可用性
- 硬件事件
- 按需条件
换句话说,launchd 是为 Mac 实际所处的混乱、移动化、电源管理的世界而设计的。
但有一个很大的问题。
创建 launchd 任务并非只需一行简单的文本。相反,你需要编写 XML 属性列表文件——这些文件冗长、要求苛刻、容易出错,并且充满了你必须理解的晦涩难懂的键值。
对于大多数理智的人来说,这绝对是不可取的。
让这一切变得轻松便捷的实用第三方应用程序
幸运的是,现在已经是 2026 年了,没有人再需要手动编写 launchd XML 文件了。许多优秀的 Mac 应用都提供了友好的界面,可以用来构建 launchd 作业或类似的定时任务。
Lingon 已经存在超过二十年了,它仍然是最好的 launchd 工具之一。
它提供了一个简洁的图形用户界面,用于创建可运行的复杂作业:
- 无论您的 Mac 处于唤醒状态还是睡眠状态
- 无论你是否登录
- 必要时需具备 root 权限
- 使用“保持活动”规则自动重启崩溃的进程
如果你需要在 macOS 上实现严肃、可靠的后台自动化,Lingon Pro 是黄金标准。
价格:一次性支付 23.99 美元,或每年订阅 11.99 美元
试用: LaunchD 任务调度器完整功能一周试用版
这是 Lingon Pro 的一个更简单、更便宜的替代品。它的深度不如 Lingon Pro,但对许多用户来说已经足够了。
主要特点:
- 创建、编辑和删除 launchd 任务
- 按时间间隔或计划(每日、每周、每月)运行作业
- 根据事件触发任务,例如:
- 体积安装
- 用户登录
- 文件夹更改
- 保持任务运行,并在崩溃时自动重启
如果您想要基本的 launchd 自动化功能而无需学习成本,那么这款售价 4.99 美元的应用程序物超所值。
Keyboard Maestro 主要不是一款日程安排工具,但它确实包含了强大的基于时间和基于事件的触发器。
部分可用触发器:
- 快捷键
- 应用启动/退出/激活/停用
- 窗口事件
- 剪贴板更改
- 具体时间或时间间隔
- 类型化字符串
- USB 设备事件
- 公共网站网址
- MIDI 输入
- 设备连接/断开
- 登录
- 网络变化
缺点:Keyboard Maestro 仅在以下情况下有效:
- 您已登录
- Mac 已唤醒
- 键盘大师引擎正在运行
所以它并不能替代 launchd。但对于用户级自动化来说,它的功能非常强大。
例如,我有一个宏,它会定期检查 Raycast、Hazel、Stream Deck 和 BetterTouchTool 是否正在运行,如果未运行则重新启动它们。这正是 Keyboard Maestro 擅长的实用自动化功能。
苹果快捷指令
macOS 上的快捷指令功能已经非常成熟,尤其是在 macOS Tahoe 之后。它现在支持基于时间的自动化操作,类似于 iOS 用户多年来一直享有的功能。
但它也存在一些重要的局限性:
- 您必须登录。
- Mac 必须处于唤醒状态
- 它更适合工作流程,而不是真正的后台服务。
不过,快捷指令仍然可以根据以下条件触发操作:
- 特定应用程序
- 电源状况
- 硬件连接
- 网络变化
- 文件系统事件
- 蓝牙设备
- 一天中的时间
如果你使用的是始终开机的 Mac mini 或 Mac Studio,快捷指令的功能会出乎意料地强大。但在处于睡眠状态的笔记本电脑上,它的功能就没那么强大了。
更多具有基于时间或事件触发器的应用
如果您只需要“按计划运行此程序”而无需深入了解 launchd,那么以下这些值得一看:
- Task Till Dawn——一款免费的自动化工具,用于文件管理、打印和浏览器任务管理。
- Alarm Clock Pro——远不止是一个闹钟;非常适合定时启动应用程序和运行脚本。
- Shortery——为 Apple Shortcuts 添加真实触发器(Wi-Fi、日历、时间等)
- Mac 版调度器— 轻量级应用程序和脚本调度器
- Automator + 日历提醒——macOS 内置技巧:创建一个 Automator 工作流程,然后让日历在特定时间打开它。
- Launch Control——一款高端的 launchd 图形用户界面,类似于 Lingon Pro,但价格更高。
结论
如果你要自动化一台真正的 Mac(而不是一台无头服务器),那么 cron 通常是不合适的工具。
对于任何需要在后台可靠运行的程序,请使用launchd 。除非您真的喜欢手动编辑 XML,否则请使用 Lingon Pro 或 LaunchD Task Scheduler 等图形界面工具进行管理。
对于用户在工作时需要进行的用户级自动化操作,Keyboard Maestro 和 Shortcuts 非常棒。
选择合适的工具,你的自动化程序才能在你需要的时候真正发挥作用,而不是在凌晨 3 点,当你的 Mac 安然地躺在床头柜上时悄无声息地失效。
原文: https://amerpie.lol/2026/02/08/stop-making-cron-jobs.html