Answers:
似乎随着操作系统的发布,睡眠/唤醒无法触发脚本,但是已经开发了第三方解决方案。
我对这些程序或其供应商没有任何个人经验。
SleepWatcher可能有用。
根据描述:当Mac或Mac的显示器进入睡眠模式或唤醒,在没有用户交互的给定时间之后,或者用户在休息后恢复活动或电源关闭时,可用于执行Unix命令。 Mac笔记本计算机的附件已连接或分离。它还可以使Mac进入睡眠模式或检索自上次用户活动以来的时间。
我在10.6.8上工作正常。各种版本可支持10.1(!)至10.7
brew install sleepwatcher
。并查看这篇文章,它非常有帮助。SleepWatcher实用程序还支持OS X El Capitan(10.11)。
这是我自己的应用程序,因此请考虑一下,但是ControlPlane能够基于“睡眠/唤醒”执行操作。您可以在http://www.controlplaneapp.com/上找到它。
ControlPlane是MarcoPolo的分支,并已更新为可以在Snow Leopard和Lion上运行。
我开发了以下简单的启动守护程序,以为Leopard上的脚本提供“唤醒”触发器:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>wake-alert</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-c</string>
<string>z=/tmp/wake; test -s $z || { date > $z; say w; };
tail -1 /Library/Logs/DirectoryService/DirectoryService.server.log | grep -v Sleep || > $z
</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Library/Logs/DirectoryService/DirectoryService.server.log</string>
</array>
<key>ExitTimeOut</key>
<integer>2</integer>
<key>ThrottleInterval</key>
<integer>1</integer>
</dict>
</plist>
您可以将“ say w”替换为您的代码。我在z上写了一个日期,但您可以将其更改为写任何内容。您可能需要为某些脚本增加“ ExitTimeOut”。我的启动守护程序位于/Library/LaunchDaemons/wake-alert.plist
启动守护程序监视DirectoryService.server.log并写入临时文件(如果该文件为空)。该文件通过日志“睡眠”条目和“关机”清除。
如果您使用“快速用户切换”进入睡眠状态,则会发现需要登录用户的脚本会尝试过早运行并失败,除非您修改启动守护程序-也许在“ secure.log”中使用grep“成功”。
/Library/Logs/DirectoryService/DirectoryService.server.log
High Sierra(10.13)中不存在。
您可能会发现并想尝试的另一个程序是EventScripts。虽然这是一个非常令人印象深刻的节目,我会建议在一般情况下,测试它为此后它不是真正似乎能够触发脚本快足以让他们来运行你的Mac进入睡眠状态之前,取而代之的是睡眠脚本直到Mac醒来(显然)无法达到目的后,它才能运行。
我希望能够拯救您和其他阅读本文的人,这是我花了很多时间进行测试得出的结论。遗憾的是我不得不说它失败了,因为在很多方面,它是一个设计精美,功能强大且灵活的程序。它也很便宜(3美元)。但是,似乎不存在在睡眠前运行脚本的低级性能。
另一方面,到目前为止,在我的测试中,sleepwatcher似乎非常可靠且快速。它也是免费的,太棒了。我会继续测试,如果发现它有时无法工作,我会更新答案,并继续测试其他选项。
更新自最初编写此答案以来,我一直没有发现sleepwatcher始终可靠,尽管它最初似乎可以正常工作。就我而言,我不需要运行任意脚本,而只需弹出外部驱动器。到目前为止,我已经找到了一款小型且价格低廉的应用程序: Jettison。这很快就成为了我无法缺少的少数实用程序之一。如果您的需求与我的需求相同,我认为您会觉得物有所值。
WakeWatcher是我创建的一个简单的OS X不露面后台应用程序,旨在解决此问题。~/.onwake
只要检测到唤醒,它就会运行。然后,您可以在该脚本中放置命令以安装/重新安装驱动器。
WakeWatcher适合用作登录项。它不是很复杂,但是它是免费和简单的。
要在睡眠时执行脚本是一个简单的补充,但是我担心在系统实际进入睡眠之前,这些脚本可完成的时间。如果您确实需要它,请针对github项目打开一个问题,然后将其添加。