我在工作时在我的 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 中有其他工作)。因此,为了跟上技术的步伐,我决定尝试使用launchd
plist 对其进行重新设计。我已经阅读了许多“教程”以及如何构建 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 帖子),我的列表似乎是正确的。我只是不确定如何让“它”“使用”我的列表。任何帮助将不胜感激。