可以在睡眠和唤醒时运行脚本吗?


48

运行OS X Lion的MacBook Pro 2010。

是否可以在睡眠和唤醒事件上运行脚本?

我的特定应用程序是我定期在MacBook和iMac上使用Dropbox同步的Truecrypt卷。我很少关闭MBP,因为关闭盖子的操作更加快捷方便,但这意味着我必须记住卸除Truecrypt卷并让它们同步后再关闭MBP。用脚本编写安装/卸载脚本很简单,但是我想更进一步,让这些脚本自动运行。

Answers:


17

似乎随着操作系统的发布,睡眠/唤醒无法触发脚本,但是已经开发了第三方解决方案。

我对这些程序或其供应商没有任何个人经验。


2
场景似乎可以满足我的需求。谢谢!
sh-beta

我有方案解雇了applescript,该脚本解雇了bash脚本并揭幕。
redolent

要结束应用程序,只需在新的AppleScrip窗口中键入此命令并将其保存在SleepScripts文件夹中:告诉应用程序“ CodeBox”退出结束告诉
brainray 2014年

24

SleepWatcher可能有用。

根据描述:当Mac或Mac的显示器进入睡眠模式或唤醒,在没有用户交互的给定时间之后,或者用户在休息后恢复活动或电源关闭时,可用于执行Unix命令。 Mac笔记本计算机的附件已连接或分离。它还可以使Mac进入睡眠模式或检索自上次用户活动以来的时间。

我在10.6.8上工作正常。各种版本可支持10.1(!)至10.7


这是一堆使用SleepWatcher 的Mac OSX提示
studgeek

4
您可以通过Homebrew安装SleepWatcher ,例如brew install sleepwatcher。并查看这篇文章,它非常有帮助。SleepWatcher实用程序还支持OS X El Capitan(10.11)。
Rockallite

11

这是我自己的应用程序,因此请考虑一下,但是ControlPlane能够基于“睡眠/唤醒”执行操作。您可以在http://www.controlplaneapp.com/上找到它。

ControlPlane是MarcoPolo的分支,并已更新为可以在Snow Leopard和Lion上运行。


1
听起来很酷的实用程序,仅此而已,不过,如果您需要触发的功能不只是唤醒/睡眠,那么它听起来很酷。我也喜欢Growl的支持,所以您知道它在做什么。和它的免费:)。
studgeek

2
应该被接受,因为它是免费的
凯文·帕克

这可用于安装和卸载具有睡眠和唤醒功能的驱动器吗?我们需要编写自动化脚本吗?
bicepjai 2015年

1
多年后,由于达斯汀(Dustin)在他的博客上发布了他没有时间修复的不兼容问题,现在无法维护Controlplane。太糟糕了,尽管有道理。
lahwran

6

我开发了以下简单的启动守护程序,以为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“成功”。


1
/Library/Logs/DirectoryService/DirectoryService.server.logHigh Sierra(10.13)中不存在。
Nowaker

可能还有其他日志可以使用。
Neville Hillyer

2

您可能会发现并想尝试的另一个程序是EventScripts。虽然这是一个非常令人印象深刻的节目,我会建议在一般情况下,测试它为此后它不是真正似乎能够触发脚本快足以让他们来运行你的Mac进入睡眠状态之前,取而代之的是睡眠脚本直到Mac醒来(显然)无法达到目的后,它才能运行。

我希望能够拯救您和其他阅读本文的人,这是我花了很多时间进行测试得出的结论。遗憾的是我不得不说它失败了,因为在很多方面,它是一个设计精美,功能强大且灵活的程序。它也很便宜(3美元)。但是,似乎不存在睡眠运行脚本的低级性能。

另一方面,到目前为止,在我的测试中,sleepwatcher似乎非常可靠且快速。它也是免费的,太棒了。我会继续测试,如果发现它有时无法工作,我会更新答案,并继续测试其他选项。

更新自最初编写此答案以来,我一直没有发现sleepwatcher始终可靠,尽管它最初似乎可以正常工作。就我而言,我不需要运行任意脚本,而只需弹出外部驱动器。到目前为止,我已经找到了一款小型且价格低廉的应用程序: Jettison。这很快就成为了我无法缺少的少数实用程序之一。如果您的需求与我的需求相同,我认为您会觉得物有所值。


1

WakeWatcher是我创建的一个简单的OS X不露面后台应用程序,旨在解决此问题。~/.onwake只要检测到唤醒,它就会运行。然后,您可以在该脚本中放置命令以安装/重新安装驱动器。

WakeWatcher适合用作登录项。它不是很复杂,但是它是免费和简单的。

要在睡眠时执行脚本是一个简单的补充,但是我担心在系统实际进入睡眠之前,这些脚本可完成的时间。如果您确实需要它,请针对github项目打开一个问题,然后将其添加。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.