【问题标题】:Opening an OS X disk image with a launchd agent while the display is sleeping在显示器休眠时使用启动代理打开 OS X 磁盘映像
【发布时间】: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。

标签: macos unix launchd


【解决方案1】:

我想我偶然发现了解决方案。只要我在“节能器”首选项窗格中将计算机设置为永不休眠,那么即使显示器处于休眠状态和/或硬盘驱动器尽可能设置为休眠状态,启动代理也会成功运行,打开磁盘映像并安装卷。莫名其妙的是,如果计算机设置为永不休眠以外的任何设置(即使它实际上可能是清醒的),启动代理就会失败。

【讨论】:

    猜你喜欢
    • 2011-03-30
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    相关资源
    最近更新 更多