当显示器处于睡眠状态时,使用launchd代理打开OS X磁盘镜像

3
我创建了一个 launchd 代理,每天早上2:45开启一个无密码保护的稀疏磁盘映像(并挂载它的唯一卷),以便备份软件能够写入该卷。 launchd 代理的plist文件保存在~/Library/LaunchAgents/中。以下是plist文件的参数:
Label: my.DiskImageOpener
KeepAlive: NO
RunAtLoad: NO
StartCalendar:
    Hour: 2
    Minute: 45
ProgramArguments:
    hdiutil
    attach
    /path/to/MyDiskImage.sparseimage

只要电脑显示屏处于开启状态,代理就可以按照广告所述工作,在指定时间打开磁盘映像并挂载其卷。另一方面,如果在启动代理指定的时间内显示器处于睡眠状态,则磁盘映像无法打开,直到显示器从睡眠中唤醒(即使是几个小时后),此时磁盘映像会立即打开并挂载其卷。如果我使用open /path/to/MyDiskImage.sparseimage命令替换hdiutil attacj /path/to/MyDiskImage.sparseimage命令,或将该命令放置在单独的可执行shell脚本中,由启动代理执行,同样会出现这种现象。
如何让启动代理在显示器处于睡眠状态下打开磁盘映像并挂载其卷?
我使用的是运行OS X 10.8.2 Mountain Lion的MacBook Pro笔记本电脑。感谢您对这个问题的任何帮助。

1
整个电脑都睡眠了吗,还是只有显示器?如果电脑处于睡眠状态,将不会进行任何处理(例如启动作业、备份等)。(好的,有一个例外:Power Nap,又称Dark Wake。) - Gordon Davisson
1
由于这是一个非常与MacOS相关的问题,建议您前往http://apple.stackexchange.com/寻求帮助。否则,我建议您将`ProgramArguments`替换为一个shell脚本,该脚本会输出一些调试信息(例如“echo about to start hdiutil at $(date)”),然后调用hdiutil。这至少可以告诉您hdiutil是否挂起,或者启动代理根本没有被调用。 - Celada
1
(1) 只有显示器处于睡眠状态,电脑是醒着的。因此,这与显示器进入睡眠状态有关。 (2) 我尝试了一个 echo $(date) 调试命令(作为单独的可执行 shell 脚本),启动代理程序即使显示器处于睡眠状态也能正常执行它。因此,这似乎是一个启动代理程序在显示器睡眠时尝试打开磁盘映像的问题。感谢您提供的这两个有用的建议。我很高兴按照您的建议将其提交到 apple.stackexchange.com。 - scolfax
1个回答

0

我认为我找到了解决方案。只要我在节能器首选项面板中将计算机设置为永不休眠,即使显示器处于睡眠状态和/或硬盘设置为尽可能休眠,启动代理也会成功运行,打开磁盘映像并挂载卷。令人费解的是,如果计算机设置为除永不休眠之外的任何设置(即使它实际上是唤醒的),启动代理都会失败。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接