OS X 10.11上的Sleepwatcher在唤醒时不执行脚本

时间:2016-09-12 21:33:14

标签: python macos unix terminal macports

在OS X 10.11上安装的Sleepwatcher 2.2中,并通过LaunchD作为代理启动它。

启动正常并显示在活动监视器中。

但是,我希望它在计算机唤醒时触发python脚本。

我的安装命令如下。

sudo mkdir -p /usr/local/sbin /usr/local/share/man/man8
sudo cp ~/Desktop/sleepwatcher_2.2/sleepwatcher /usr/local/sbin
sudo cp ~/Desktop/sleepwatcher_2.2/sleepwatcher.8 /usr/local/share/man/man8
sudo cp ~/Desktop/sleepwatcher_2.2/sleepwatcher/config/rc.sleep /etc
sudo cp ~/Desktop/sleepwatcher_2.2/sleepwatcher/config/rc.wakeup /etc
sudo cp ~/Desktop/sleepwatcher_2.2/sleepwatcher/config/de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist /Library/LaunchAgents

chmod +x /etc/rc.sleep
chmod +x /etc/rc.wakeup
chmod +x /usr/local/bin/test.py

我的rc.wakeup文件如下。

#!/bin/sh
/usr/local/bin/python3 /usr/local/bin/test.py

通过键入以下内容在终端窗口执行Sleepwatcher时,它似乎有效。

/usr/local/sbin/sleepwatcher --verbose --wakeup /usr/local/bin/test.py 

但是,当试图将它作为LaunchD下的启动项运行时,它似乎无法执行我的python脚本。

我在全面搜索,无法弄清楚在LaunchD中启动时它无法正常工作。

有没有人遇到过这类问题?

提前致谢。

1 个答案:

答案 0 :(得分:2)

我遇到了类似的问题,因此我使用另一种名为Hammerspoon的开源工具采用了不同的方法。它可以为MacOS上的一系列事物提供自动化,包括睡眠/唤醒事件。通过将以下内容添加到Hammerspoon ~/.hammerspoon/init.lua(或创建一个')脚本,在机器唤醒时触发,可以非常简单地复制sleepwatcher的功能或睡眠并调用相应的唤醒和睡眠脚本(例如/Users/username/scripts - 确保 username 已更改)来自sleepwatcher:

function caffeinateWatcher(eventType)
    if (eventType == hs.caffeinate.watcher.systemWillSleep or
            eventType == hs.caffeinate.watcher.systemWillPowerOff) then
            print ("WillSleep...")
            -- Execute sleep script
            hs.task.new("/Users/username/scripts/rc.sleep", nil):start()
    elseif (eventType == hs.caffeinate.watcher.systemDidWake) then
            print ("Woken...")
            -- Execute wake script
            hs.task.new("/Users/username/scripts/rc.wake", nil):start()
    end
end

sleepWatcher = hs.caffeinate.watcher.new(caffeinateWatcher)
sleepWatcher:start()

注意,如果您希望Hammerspoon启动您需要的shell脚本,以确保它们以标准bash shell标头#!/bin/bash开头。