利用 macOS 自动化脚本和cron定时任务提升生产力

date
Jan 4, 2024
slug
automation in macos
status
Published
tags
个人开发
macOS
小工具
summary
本文介绍了如何在 macOS 上利用自动化脚本和 cron 定时任务来自动执行日常任务,如打开应用和网站。通过 AppleScript 编写脚本,结合 Launched 进程管理器,可以实现在特定时间自动执行脚本,从而提高工作效率。文章提供了详细的配置文件示例,并解释了如何通过 launchctl 命令加载和调试这些定时任务。此外,还强调了在系统更新后,这些自动化工具对于解决系统卡顿问题的重要性。
type
Post
notion image
macOS 提供了强大的自动化脚本环境,允许用户通过 AppleScript 编写脚本来控制应用和系统行为。例如,通过 PopClip 的Bob 翻译插件,可以轻松地唤起翻译框。如果您希望创建自己的自动化脚本,如每天自动打开特定网站或应用,可以使用 ChatGPT 等 AI 工具来辅助编写代码。

脚本示例代码

以下是一个简单的 AppleScript 示例,用于打开默认浏览器并导航到指定 URL,同时打开提醒事项应用并发送通知:
tell application "System Events"
    set defaultBrowser to name of first application process whose frontmost is true
end tell

tell application defaultBrowser
    open location "<https://play.google.com/console>"
    activate
end tell

-- 打开提醒事项应用
tell application "Reminders"
    activate
end tell

-- 发送通知
display notification "请检查任务 Inbox 并确定下一步做什么" with title "GTD 提醒"

自动化脚本的执行

要运行这些脚本,您需要将它们导出为 .app 文件,然后双击即可执行。为了实现自动化,可以使用cron 定时任务来触发这些脚本。如果您不熟悉如何设置 cron 任务,可以考虑使用 Launched,这是一个macOS 进程管理器,可以帮助您配置和调度任务。

cron 定时任务配置

以下是一个配置文件示例,用于在特定时间点执行上述脚本:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "<http://www.apple.com/DTDs/PropertyList-1.0.dtd>">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <!-- 全局唯一的名称 -->
    <string>com.jiangjiwei.cron.gtd</string>

    <key>ProgramArguments</key>
    <array>
        <string>osascript</string>
        <!-- 全局唯一的脚本路径 -->
        <string>/Users/jiangjiwei/Code/applescript/open_reminder.app</string>
    </array>
    <!-- 定时任务的运行时间 -->
    <key>StartCalendarInterval</key>
    <array>
      <!-- 9:00 AM -->
      <dict>
        <key>Hour</key>
        <integer>9</integer>
        <key>Minute</key>
        <integer>0</integer>
      </dict>
      <!-- 12:00 PM -->
      <dict>
        <key>Hour</key>
        <integer>12</integer>
        <key>Minute</key>
        <integer>0</integer>
      </dict>
      <!-- 3:00 PM -->
      <dict>
        <key>Hour</key>
        <integer>15</integer>
        <key>Minute</key>
        <integer>0</integer>
      </dict>
      <!-- 5:40 PM -->
      <dict>
        <key>Hour</key>
        <integer>17</integer>
        <key>Minute</key>
        <integer>40</integer>
      </dict>
    </array>
    <!-- 日志文件路径 -->
    <key>StandardInPath</key>
    <string>/Users/jiangjiwei/Code/applescript/log/run-in-meican.log</string>
    <key>StandardOutPath</key>
    <string>/Users/jiangjiwei/Code/applescript/log/run-out-meican.log</string>
    <key>StandardErrorPath</key>
    <string>/Users/jiangjiwei/Code/applescript/log/run-err-meican.log</string>
  </dict>
</plist>
将此配置文件命名为com.cherry.cron.open.gtd.plist,并放置在适当的目录下,可以实现不同的自动化效果:
  1. ~/Library/LaunchAgents:脚本仅在当前用户登录时执行。
  1. /Library/LaunchAgents:脚本在系统启动时和每次用户登录时执行。
  1. /Library/LaunchDaemons:脚本在系统启动时执行,无论用户是否登录。
 

调试与加载

为了调试和加载配置文件,可以使用以下命令:
# 加载配置文件
launchctl load /path/to/com.jiangjiwei.cron.gtd.plist

# 取消/卸载配置文件
launchctl unload /path/to/com.jiangjiwei.cron.gtd.plist
请注意,不能多次加载同一个配置文件,否则会报错。如果需要取消加载,使用unload命令。
注意事项:
加载配置文件后,通常需要重启电脑以确保系统加载了新的配置。如果遇到问题,可以使用launchctl list | grep $plist_filename命令来检查配置文件是否正确加载。
 
通过结合macOS的自动化脚本和cron定时任务,您可以创建强大的自动化工具,以提高工作效率。随着macOS的不断更新,这些工具可以帮助您更好地管理日常任务,尤其是在系统更新后可能出现的卡顿问题。

© Craig Hart 2021 - 2025