【发布时间】:2012-02-18 08:55:30
【问题描述】:
我在 OS X 10.4.11 上使用 launchd 获得类似 cron 的 FileMaker 脚本调度,这真是太棒了。 (我在serverfault 上描述了我的早期工作。)起初我认为问题在于 FileMaker 脚本打开了一个 GUI,这对于 LaunchDaemon 来说似乎是禁止的。然后我把它改成了一个 LaunchAgent,它允许使用窗口资源,但仍然不行。
这里列出了一些没有意义的事情:
-
如果您在手动加载后使用 launchctl 启动任务,则一切正常。
sudo launchctl start my.script.name 如果您选择未来几分钟(而不是未来几个小时)的 StartInterval,然后加载 .plist,一切正常。 (起初我以为这可能与屏幕保护程序有关——当 ss 执行时,某些东西会被垃圾收集或其他东西;但如果即使在 ss 启动之后也安排了它,它似乎也能工作,只要它不是未来太远了。)
我将 FileMaker 程序的调用封装在一个 shell 脚本中,该脚本除了执行 FileMaker 程序之外,还将时间戳写入日志文件。通过阅读这个日志文件,我可以验证,是的,shell 脚本确实是由 launchd 在适当的时间调用的。或者至少,几乎,因为:
-
日志显示一些奇怪的东西:如果我安排在晚上 8:08 启动脚本,我会执行两次,彼此相隔几秒钟:
[2012 年 1 月 24 日星期二 20:07:57 CST] 正在执行脚本!
[2012 年 1 月 24 日星期二 20:08:00 CST] 正在执行脚本!
我已经走到了尽头——我已经阅读了相关的联机帮助页、Apple 技术文档以及 StackExchange 网站上的其他文章。我真的尽我所能完成了我的功课。任何可以帮助我的人都会有一些严重的因果报应。
再说一次,这里的 .plist 有一些杂乱无章的内容(XML 定义、日志信息)被编辑掉了。 (请记住,这在手动加载时有效,所以我知道 plist 本身没问题。)
<plist version="1.0">
<dict>
<key>Label</key>
<string>shane.useragent.launcher</string>
<key>ProgramArguments</key>
<array>
<string>/Users/shane/launchFM.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>20</integer>
<key>Minute</key>
<integer>8</integer>
</dict>
</dict>
</plist>
【问题讨论】:
-
一些想法: 1:当您编写脚本时,FileMaker 是否正忙于做其他事情而没有响应? 2:您要编写脚本的数据库是否仍然打开,如果打开,它是否仍然是 FileMaker 中的活动数据库? 3:您是否尝试过使用 iCal 警报实现自动化? 4:您的 FileMaker 设置是什么? FM 专业版/高级版?调频服务器?共享文件?单用户文件?
-
感谢您的回复。 #1:不;可能的例外是多次启动导致它自己中断并因此搞砸了。我会考虑的。 #2:运行脚本使相应的数据库处于活动状态。 #3:我没有,但它可能会这样。我想以 Apple 祝福的方式做事,但很快就失去了耐心。 #4:调频专业版。至于其余的,我不确定。在没有其他人运行任何基于 FM 的东西的情况下,您是否会期望在这些不同的情况下出现不同的行为?
-
#4:如果没有其他人在运行 FM,那么通常不会。
标签: macos filemaker launchd launch-agent