【发布时间】:2013-01-03 23:22:27
【问题描述】:
我创建了一个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
只要计算机的显示器处于唤醒状态,代理就会像宣传的那样工作,在启动代理中指定的时间打开磁盘映像并安装其卷。另一方面,如果显示器在启动代理中指定的时间处于睡眠状态,则磁盘映像将无法打开,直到显示器从睡眠中唤醒(即使是几个小时后),此时磁盘映像会立即打开并安装它的卷。如果我将hdiutil attacj /path/to/MyDiskImage.sparseimage 命令替换为open /path/to/MyDiskImage.sparseimage,或者将命令放在启动代理执行的单独的可执行shell 脚本中,也会发生同样的现象。
如何让启动代理在显示器处于休眠状态时打开磁盘映像并挂载其卷?
我使用的是运行 OS X 10.8.2 Mountain Lion 的 MacBook Pro 笔记本电脑。感谢您对此问题的任何帮助。
【问题讨论】:
-
是整台电脑都睡着了,还是只是显示器睡着了?如果计算机处于睡眠状态,则不会进行任何处理(启动作业、备份等)。 (好吧,有一个例外:Power Nap, aka Dark Wake。)
-
因为这是一个非常特定于 MacOS 的问题,为什么改用apple.stackexchange.com 可能会更好。否则,我建议将
ProgramArguments替换为回显一些调试行(例如echo about to start hdiutil at $(date))然后调用hdiutil的shell 脚本。这至少可以告诉您hdiutil是否挂起,或者启动代理是否根本没有被调用。 -
(1) 只是显示器处于休眠状态。电脑醒了。所以它与显示器处于睡眠状态有关。 (2) 我尝试了一个
echo $(date)调试命令(作为单独的可执行shell 脚本),即使显示器处于休眠状态,启动代理也能正确执行它。因此,启动代理试图在显示器处于休眠状态时打开磁盘映像似乎是个问题。感谢您提供这两个有用的建议。我很高兴按照您的建议将其提交给 apple.stackexchange.com。