Agent Skills
返回列表
定时启停 macOS 应用

定时启停 macOS 应用

IT 运维与安全 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_8bae2f22/launchctl。

技能介绍

要解决什么问题

在 macOS 上让某个应用在固定时间自动打开或退出,常见做法是手写 LaunchAgents 的 plist、自己换算 StartCalendarInterval,再用 launchctl load 加载。应用名可能是中文、路径在 /Applications 或用户目录,cron 里的 *、*/2、工作日区间也要转成 launchd 能接受的配置,改错了往往要到 /tmp 日志里排查。

本技能把「说什么时间、动哪个应用」收敛成一条对话:解析应用(名称、.app 路径或 Bundle ID)、把「每天 9 点」「周一至周五 8:30」等描述转成调度规则,并调用 scripts/macos_launchctl.sh 完成创建、列出、启停、删除与状态查看。

如何工作

核心脚本是 scripts/macos_launchctl.sh,主要子命令包括:

  • create:生成启动/停止两类 plist(默认在 ~/Library/LaunchAgents/,命名如 com.user.launch.<应用>.start.plist / .stop.plist),停止侧常用 osascript 发 quit
  • list / info / status:查看当前用户 LaunchAgents 与运行状态、日志路径(如 /tmp/<任务>.log)
  • start / stop / restart / remove:手动触发或卸载任务;remove 会备份 plist
  • --dry-run:只预览将要写入的 plist 与 launchctl 操作,不实际落盘

推荐流程是:先理解意图(纯查看/删除 vs 新建定时)→ 解析应用(绝对路径优先,其次常见目录,必要时 mdfind)→ 解析时间(支持自然语言与标准 cron,复杂表达式会展开为多个 StartCalendarInterval)→ 先 dry-run 展示完整计划 → 用户明确确认后再执行 load/unload 与写文件。

边界与注意点

  • 安全确认是硬规则:任何写入或删除前必须展示目标应用、触发时间、plist 路径与将执行的 launchctl 命令,并等待明确确认;删除需额外列出将被删除文件的完整路径。
  • launchd 的 Weekday 为 0(周日)~6(周六);StartCalendarInterval 不能像 cron 那样随意用 *,脚本会对含 ,、-、*/n 的表达式做展开。
  • 用户级任务无需 sudo;部分应用无法被 AppleScript 正常退出,停止任务可能需改用 killall 等策略。
  • 修改 plist 后通常要先 launchctl unload 再 load 才会生效;任务未触发时可查 launchctl list 与 error 日志。

使用场景

  • 每天 9 点自动打开 Safari、晚上 10 点退出微信,用自然语言描述时间而不是手写 plist 和 cron。
  • 周一至周五早上 8 点启动企业微信、晚上 6 点关闭,需要把工作日区间转成 launchd 的 StartCalendarInterval。
  • Slack 等协作应用希望每 2 小时自动拉起一次,由脚本把「每 N 小时」展开为可加载的定时配置。
  • 修改或删除已有 LaunchAgent 前,先用 --dry-run 预览 plist 路径与 launchctl 命令,确认后再 load/unload。

适合人员

  • 在 Mac 上长期开着企业微信/Slack,希望按上下班时段自动启停、减少后台占用的远程办公同学。
  • 负责团队 Mac 终端维护,需要把重复的 launchctl 启停配置标准化、可列可查可删除的 IT 运维。
  • 能跑终端但不想啃 plist XML 与 Weekday 规则,仍要在本机自建「定点开/关某个 .app」的 macOS 用户。
  • 定时任务突然不触发,需要对照 list、status、info 和 /tmp 错误日志定位 LaunchAgent 加载问题的排查者。