我在Mac上使用Skype和Adium客户端。我有两个脚本(Ruby,如果重要),start_chats
和kill_chats
启动/终止两个应用程序。这些脚本都是可执行的,并且可以从命令行运行。我曾经在Snow Leopard中使用cron在预定的时间运行这些脚本:start_chats
当我进入我的办公室时是8:00,kill_chats
来杀死他们(因此,让我退出所有在我离开办公室后的6:00(18:00)连接帐户。
由于我最近得到了一台带有Lion的新机器,cron的行为非常不稳定,而且往往不执行其工作(我在同一个crontab中有其他工作)。因此,在努力跟上技术的过程中,我决定尝试使用launchd
plist进行重新设计。我已经浏览了许多“教程”以及如何构建一个plist来执行我的脚本的基于时钟的简单执行。大多数这些教程的问题在于,在创建plist之后,他们并没有真正告诉您该怎么做。以下是我的示例kill_chats
plist(在this post的帮助下构建):
<?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帖子),我的列表似乎是正确的。我只是不确定如何让“它”“使用”我的清单。任何帮助将不胜感激。