macos 中实现精准、可靠、低功耗且支持合盖唤醒的定时任务,必须使用 launchd;推荐用户级 launchagents(登录后运行)、系统级 launchdaemons(支持唤醒执行)或 startinterval(高频轮询),禁用 cron 和前台循环。

如果您希望在 macOS 系统中实现脚本的精准、可靠、低功耗定时执行,且要求任务在合盖睡眠后仍能按计划唤醒运行,则必须绕过 cron 和前台 Python 循环等易被挂起的方案,转而采用系统原生服务管理框架 launchd。以下是多种互斥但均可独立生效的配置路径:
一、使用 LaunchAgents 配置用户级定时任务(推荐日常开发与个人自动化)
LaunchAgents 适用于当前用户已登录时运行的任务,支持 StartCalendarInterval(指定时刻)和 StartInterval(固定秒数间隔)两种触发模式;任务随用户会话自动加载,无需 root 权限,适合 Python、Shell 或 PHP 脚本等轻量级自动化需求。
1、打开终端,进入用户 LaunchAgents 目录:cd ~/Library/LaunchAgents。
2、创建 plist 配置文件:nano com.example.dailybackup.plist。
3、输入以下内容(请将 /Users/yourname/scripts/backup.sh 替换为实际脚本绝对路径,并确保该脚本已赋予可执行权限:chmod +x /path/to/script.sh):
4、保存并退出 nano:Control+O → Enter → Control+X。
5、加载任务:launchctl load ~/Library/LaunchAgents/com.example.dailybackup.plist。
6、立即触发一次测试:launchctl start com.example.dailybackup。
二、使用 LaunchDaemons 配置系统级定时任务(适用于无人值守与合盖唤醒关键任务)
LaunchDaemons 在系统启动时即加载,不依赖任何用户登录状态,具备在睡眠后按计划唤醒整机并执行的能力,适合日志轮转、远程心跳检测、数据同步等需严格保障时效性的后台服务。
1、切换至系统级 LaunchDaemons 目录:sudo mkdir -p /Library/LaunchDaemons。
2、创建守护进程配置文件:sudo nano /Library/LaunchDaemons/com.example.systemsync.plist。
3、填入以下内容(注意:所有路径必须为绝对路径;脚本需提前设置可执行权限;/usr/local/bin/sync_task.sh 需替换为真实路径):
4、赋予配置文件 root 所有权:sudo chown root:wheel /Library/LaunchDaemons/com.example.systemsync.plist。
PyCharm 2026.2.0.1 Mac版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合在macOS系统上进行 Python 项目开发、运行、调试和测试。
5、加载并启用:sudo launchctl load /Library/LaunchDaemons/com.example.systemsync.plist。
三、使用 StartInterval 实现高频轮询任务(如每分钟检查状态)
当任务需以固定时间间隔持续运行(例如每 60 秒轮询 API、刷新缓存或监控文件变化),StartInterval 比 StartCalendarInterval 更简洁高效;该方式不依赖具体时刻,仅需设定秒数,launchd 会在上次执行结束后等待指定间隔再启动下一次。
1、创建用户级 plist 文件:nano ~/Library/LaunchAgents/com.example.minutelycheck.plist。
2、填入以下内容(以每 90 秒执行一次 /Users/yourname/scripts/check.sh 为例):
3、保存退出 nano:Control+O → Enter → Control+X。
4、加载任务:launchctl load ~/Library/LaunchAgents/com.example.minutelycheck.plist。
四、通过快捷指令 + AppleScript 实现图形界面应用级定时触发(无需命令行)
该方法不涉及 launchd 配置,而是利用 macOS 内置“快捷指令”App 创建基于时间的个人自动化,通过 AppleScript 启动或终止 GUI 应用,全程图形化操作,适合非技术用户或需人工确认场景。
1、打开“快捷指令”App,切换到“自动化”标签页。
2、点击右上角“+”,选择“创建个人自动化”,触发器类型选“特定时间”。
3、设定目标时间(例如 07:45:00),开启“重复”并选择“每天”。
4、点击“下一步”,添加操作,搜索并选择“运行AppleScript”。
5、在脚本框中输入:tell application "Terminal" to activate(将 Terminal 替换为任意已安装应用名称,如 "Safari"、"WeChat")。
6、点击“下一步”,关闭“运行前询问”开关,点击“完成”保存。










