2008-09-25 68 views

回答

91

只需使用启动。这是一个非常强大的启动器系统,同时它也是Mac OS X的标准启动器系统(目前的OS X版本甚至没有启动系统就无法启动)。对于那些谁不熟悉launchd(或OS X一般),它就像initcronat,SysVinit的(init.d),inetdupstartsystemd之间的杂交。借用所有这些项目的概念,但也提供您可能在其他地方找不到的东西。

每个服务/任务都是一个文件。该文件的位置取决于以下问题:“该服务应该何时运行?”和“服务需要哪些权限?”

系统任务去

/Library/LaunchDaemons/ 

如果他们奔跑,不管是否有用户在系统或没有登录。他们将以“根”权限启动。

如果如果任何用户登录他们将只运行,他们去

/Library/LaunchAgents/ 

,并会与刚登录的用户的权限执行。

若有人只运行,如果你登录,他们去

~/Library/LaunchAgents/ 

的地方〜是你的HOME目录。这些任务将以您的权限运行,就像您自己通过命令行启动它们或双击Finder中的文件一样。

注意,也存在/System/Library/LaunchDaemons/System/Library/LaunchAgents,但像往常一样,/System下的一切是由OS X.管理您不得将任何文件那里,你不得修改任何文件存在,除非你真的知道你在做什么。在系统文件夹中发生的混乱可能会使您的系统无法使用(使其进入一种状态,甚至会拒绝重新启动)。这些是Apple放置launchd任务的目录,这些任务使您的系统在启动过程中启动并运行,根据需要自动启动服务,执行系统维护任务等。

每个launchd任务有一个plist格式的文件。它应该有反向域名表示法。例如。你可以命名你的任务

com.example.my-fancy-task.plist 

这plist可以有各种选项和设置。每手写一篇文章不太理想,你可能想要免费工具Lingon来创建你的任务。这个工具以前是免费的,现在它在app store中的价格是5美元,在非app store商店中是10美元(非app store的版本更加强大,如果你已经计划付钱购买它,版)。如果有人知道免费软件或开放源代码的相似工具,请在评论中给我留一条线,我宁愿推荐一个(不想在此为商业软件做广告)。

只是作为一个例子,它可能看起来像这样

<?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.example.my-fancy-task</string> 
    <key>OnDemand</key> 
    <true/> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/bin/sh</string> 
     <string>/usr/local/bin/my-script.sh</string> 
    </array> 
    <key>StartInterval</key> 
    <integer>1800</integer> 
</dict> 
</plist> 

此代理将运行shell脚本/usr/local/bin/my-script.sh每隔1800秒(每30分钟)。你也可以在某些日期/时间运行任务(基本上launchd可以完成cron可以做的所有事情),或者甚至可以禁用“OnDemand”,导致launchd保持进程永久运行(如果它退出或崩溃,launchd会立即重启) 。你甚至可以限制一个进程可以使用多少资源(如前所述,Lingon在一个不错的UI界面中显示所有这些设置)。

更新:尽管仍支持OnDemand,但不推荐使用。新设置名为KeepAlive,这更有意义。它可以有一个布尔值,在这种情况下,它与OnDemand完全相反(将其设置为false的行为如同OnDemandtrue,反之亦然)。伟大的新功能是,它也可以具有字典值而不是布尔值。如果它具有字典值,那么您有几个额外的选项可以让您更好地控制粮食,在这种情况下任务应该保持活跃。例如。只要程序以退出代码0结束,只有在磁盘上存在某个文件/目录时,只有在另一个任务还活着时,或者只有在网络当前运行时,它才会保持活动状态。

您也可以手动启用通过命令行/禁用任务:

launchctl <command> <parameter> 

命令可以加载或卸载,加载的plist或再次卸载它,在这种情况下,参数是文件路径。或者命令可以是开始或停止,只是启动或停止这样的任务,在这种情况下参数是标签(com.example.my-fancy-task)。其他命令和选项也存在。

看到苹果公司的plist formatlaunchctl command line tool(请注意,您可以选择在顶部的OS X版本,因为该格式/选项都不同的OS X版本之间会发生变化)

+0

如果我作为用户想要运行即使没有登录时该怎么办?这是可能的,还是我必须要求管理员在/ Library/LaunchDaemons中放置一些东西? – 2008-09-25 16:19:05

10

MacOSX上,至少有以下选项:

  • 定期与 “运行脚本” 行动的iCal报警
  • launchd
  • 的cron(link1link2

从个人经验来看,cron是最可靠的。当我测试时,launchd有一些bug和怪癖。 iCal警报仅在您登录时运行(但这可能是您更喜欢的)。

2

对于苹果的脚本文件,我设置创建一个特殊的iCal日历并使用警报定期运行它们。对于命令行工具,我使用launchd。

5

正如Mecki指出的那样,launchd将会是这条路。有用于launchd的GUI界面称为Lingon,你可能想看看,而不是通过手工编辑的launchd文件:

Lingon是创建编辑的launchd 配置文件用于Mac OS X的图形用户界面豹10.5。

[snip ...]

编辑配置文件在这个版本 比以往更容易,它有两种不同的模式。基本模式有一个非常简单的界面和专家模式 中最常见的 设置,您可以直接在文本中添加所有设置,或通过菜单插入 。

1

仅供参考:虽然我很想念它的siplicity,但是cron在OS X上是过去的事情。它是关于豹的看门狗。自从Tiger推出后,所以如果你运行Leopard cron不是一个选项。

22

你可以使用非常方便的plist发生器:http://launched.zerowidth.com/(无需购买任何东西......)

它会给你一个壳状的衬垫来注册已经建议的launchd

新的预定作业
1

Mac有一个Automator工具,它与Windows中的任务计划程序相同。但是使用Automator,您可以每天安排一项任务,并将任务与定期日历事件关联起来,以每天在指定时间运行脚本。参考链接to run scripts on daily basis in Mac OS

相关问题