我有一个很简单的工作,我想每小时运行一次。我可以使用来做cron,但是我想我会用它来学习的launchd,因为我听到了关于它的好消息。我已经将该man launchd.plist页面作为参考,但是我正在寻找更多有关构建示例作业的内容。
cron问题,superuser.com是不合适的地方吗?由于launchd是Apple的版本cron(还有daemontools,以及其他可能的版本),所以我认为这是我最好的选择。
我有一个很简单的工作,我想每小时运行一次。我可以使用来做cron,但是我想我会用它来学习的launchd,因为我听到了关于它的好消息。我已经将该man launchd.plist页面作为参考,但是我正在寻找更多有关构建示例作业的内容。
cron问题,superuser.com是不合适的地方吗?由于launchd是Apple的版本cron(还有daemontools,以及其他可能的版本),所以我认为这是我最好的选择。
Answers:
launchd以root用户身份运行守护程序(/Library/LaunchDaemons或/System/Library/LaunchDaemons),并且无论用户是否登录,都将运行它们。当用户以该用户身份登录时,将运行启动代理(/Library/LaunchAgents/或~/Library/LaunchAgents/)。您不能使用setuid来更改在守护程序上运行脚本的用户。该/System目录是为Mac OS X任务保留的,因此,我建议您根据需要将您的launchdplist放在/Library或~/Library文件夹中。
因此,第一步是确定您是要创建代理还是守护程序。
第二步是制作.plist文件。您可以使用诸如Lingon之类的基于GUI的程序来解决此问题,也可以只使用自己喜欢的文本编辑器:
样本.plist运行每小时的脚本(StartInterval或者StartIntervalCalendar是我们想要的按键- StartInterval一个项目的每一个发生x秒,StartIntervalCalendar在特定的时间和/或日期见。以超级用户126907对我StartCalendarInterval制造为例):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.IDENTIFIER_HERE.SOMETHING</string>
<key>OnDemand</key>
<true/>
<key>RunAtLoad</key>
<false/>
<key>UserName</key>
<string>USERNAME HERE</string>
<key>Program</key>
<string>/PATH/TO/SCRIPT</string>
<key>ProgramArguments</key>
<array>
<string>Argument_1</string>
<string>Argument_2</string>
</array>
<key>StartInterval</key>
<integer>3600</integer>
</dict>
</plist>
.plist根据需要修改,以指向您的脚本和任何必要的参数(参数在单独的行上),并使用与Label值相同的名称保存文件,但.plist在文件末尾。(例如,local.my-mac.flickrstats将另存为local.my-mac.flickrstats.plist)。如果还没有,请将该.plist文件移动到/Library/LaunchDaemons创建守护程序时(始终运行)或~/Library/LaunchAgents(仅您已登录)或/Library/LaunchAgents(任何用户已登录)。
要开始作业,您需要launchctl根据需要运行以加载文件。对于中的项目/Library,您应该使用sudo:例如,sudo launchctl load -w /PATH/TO/PLIST
作为参考,还请检查有关超级用户的以下问题:以root用户身份启动命令,加载系统范围的守护程序以及如何获取每天运行的脚本
我知道这不是一个很好的教程,但是您可以查看Apple 的《Daemons and Services编程指南》,其中有关于计划定时作业的部分。
我知道这不是完整的教程,但是有了它,您可以了解的基础知识launchd。
它还提供了一个crond任务示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.
com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.apple.periodic-daily</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/periodic</string>
<string>daily</string>
</array>
<key>LowPriorityIO</key>
<true/>
<key>Nice</key>
<integer>1</integer>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>3</integer>
<key>Minute</key>
<integer>15</integer>
</dict>
</dict>
</plist>
这对我有很大帮助:http : //launchd.info
它涵盖了使用Terminal或启动的GUI LaunchControl进行的配置,管理和故障排除。还提供了示例。
我知道您在寻找教程,但是在偶然的情况下有人来这里寻找工具来帮助他们制作/编辑已发布的条目,我以前使用过:Lingon(sourceforge)
它不再被积极开发,但是可以正常工作(并且显然包括源代码等)。我已在Snow Leopard上使用它来计划备份到Amazon云等。