2016-09-12 52 views
1

在OS X 10.11上安装了Sleepwatcher 2.2并通过LaunchD作为代理启动。OS X 10.11上的Sleepwatcher在唤醒时不执行脚本

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

但是,我想让它在电脑醒来时触发一个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中启动时不工作。

有没有人遇到这种类型的问题?

在此先感谢。

+0

是的,我把命令放在chmod + x /etc/rc.sleep中。我不知道为什么上面有额外的空间。 – user1709730

+0

您似乎缺少plist的注册信息,这需要启动'sleepwatcher'运行,并且在睡眠和唤醒时实际调用'/ etc/rc.sleep'和'/ etc/rc.wake'脚本事件发生。 – Petesh

+0

嗨Petesh,而不是做一个launchctl加载/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist,我重新启动服务器。这也应该把它拿起来。你知道是否有任何遗留的日志,以便我可以看到在加载期间或在唤醒事件期间脚本执行过程中可能发生了什么错误? – user1709730

回答

0

我遇到了类似的问题,所以我采用了另一种使用另一个名为Hammerspoon的开源工具的方法。它可以提供MacOS上一堆事物的自动化,包括睡眠/唤醒事件。这是很简单的通过添加以下到Hammerspoon的~/.hammerspoon/init.lua复制sleepwatcher的功能(或创建一个“勺子”)脚本时,机器唤醒,睡觉,并呼吁从sleepwatcher相应的唤醒和睡眠的脚本触发:

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

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

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