我有一个很简单的工作,我想每小时运行一次。我可以使用来做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任务保留的,因此,我建议您根据需要将您的launchd
plist放在/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云等。