你写了一个Python脚本,每天自动抓取加密货币价格,或者备份重要文件。本地测试完美运行,crontab也配置好了,设定每晚6点半执行。几天后查看日志——一片空白。什么都没发生。
这就是Mac用户最熟悉的陷阱:睡眠模式。
![]()
cron是Unix系统的传奇工具,几十年如一日支撑着服务器自动化。但它诞生时的假设是:机器永远在线,藏在恒温机房里从不休眠。你的Mac笔记本完全不同。合上盖子、离开一小时,系统就进入睡眠省电。6点半到了,电脑正在睡觉?cron直接跳过,不会补跑。明天6点半还在睡?继续跳过。所谓的"自动化",变成了需要你守着电脑才能执行的摆设。
![]()
苹果早就意识到这个问题,于是有了launchd。
launchd是macOS原生的后台任务管理器,取代cron和init,掌管系统启动后的所有进程。关键差异在于唤醒机制:Mac睡眠时硬件时钟仍在走动,开盖后内核更新系统时间,launchd检查调度表,发现错过的StartCalendarInterval任务,会在唤醒后立即补执行。
配置前需要明确文件位置。launchd分两类:LaunchDaemons放在/Library/LaunchDaemons/,以root身份开机即运行,适合数据库等系统服务;LaunchAgents放在~/Library/LaunchAgents/,登录后当前用户身份运行,能访问个人文件和权限——个人脚本几乎都用这个。
![]()
具体迁移步骤:不再编辑crontab,而是编写.plist格式的XML配置文件,放入~/Library/LaunchAgents/目录,用launchctl load加载。标签控制行为:StartCalendarInterval替代cron的时间语法,RunAtLoad决定登录时是否立即执行,KeepAlive处理崩溃重启。
一个细节:脚本路径必须用绝对路径,环境变量与终端不同。建议在.plist内用EnvironmentVariables显式设置PATH,或在脚本开头source ~/.zshrc。否则会出现终端能跑、launchd失败的情况。
从cron到launchd,不只是换了个工具。它反映了个人计算与服务器运维的根本差异:笔记本会睡觉,而好的自动化应该学会自己补课。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.