4

我在工作时在我的 Mac 上使用 Skype 和 Adium 客户端。我有两个脚本(Ruby,如果重要的话),start_chats并且kill_chats启动/终止两个应用程序。这些脚本都是可执行的,并且可以从命令行正常工作。我曾经在 Snow Leopard 中使用 cron 在预定时间运行这些脚本: start_chats在 8:00 当我进入我的办公室时,并kill_chats在 6:00 (18:00) 杀死它们(因此,将我从所有连接的帐户中注销) 00) 在我离开办公室后。

因为我最近买了一台装有 Lion 的新机器,所以 cron 的行为非常不稳定,而且通常根本不执行它的工作(我在同一个 crontab 中有其他工作)。因此,为了跟上技术的步伐,我决定尝试使用launchdplist 对其进行重新设计。我已经阅读了许多“教程”以及如何构建 plist 来对我的脚本进行简单的基于时钟的执行。大多数这些教程的问题在于,它们并没有真正告诉您在创建 plist 后要做什么。这是我的示例plist(在这篇文章kill_chats的帮助下构建):

<?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>local.me.kill_chats</string>
    <key>OnDemand</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/me/bin/kill_chats</string>
    </array>
    <key>RunAtLoad</key>
    <false/>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>18</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
</dict>
</plist>

是的,它被命名local.me.kill_chats.plist了,我把它放在我的~/Library/LaunchAgents/目录中。请注意,我也尝试过使用Program密钥,但这也不起作用。如果我跑

$> launchctl load ~/Library/LaunchAgents/local.me.kill_chats.plist

它说列表已经加载,确实我可以看到它

$> launchctl list | egrep kill_chats
   -    0   local.me.kill_chats

但是当我的系统时钟达到 plist 中指定的时间时,我的kill_chats脚本没有运行。当然我不是每次都等到 18:00 才测试,所以我把它改成比当前时间提前几分钟,但它仍然没有执行脚本。我什至尝试过Lingon(较旧的免费版本),但似乎没有任何效果。

难道我做错了什么?我的 plist 有问题吗?正如我所说,我浏览了许多不同的网站(甚至是大量 Stackexchange 帖子),我的列表似乎是正确的。我只是不确定如何让“它”“使用”我的列表。任何帮助将不胜感激。

(注意:管理员,如有必要,请随时将其迁移到Apple超级用户)

4

0 回答 0