我的MacBook会自发地从睡眠模式中苏醒过来,同时会有很高的扇形活动。
我想在RTC或电源设置中对此进行调查?或者通过进程等(使用一些进程/内核魔术!)
提示:它可能是由"rtcwake“管理的。
我甚至不确定这是预定的任务,还是WiFi唤醒的任务,还是其他的任务。
我不想猜测在Mojave中通常是什么原因。相反,我需要在我的MacOS (Mojave)上对此做一个系统的调查。与Linux相关的答案也很受欢迎。
这是关于系统待机,睡眠模式,暂停模式。(请注意,这与单个进程的站立和唤醒无关。整个笔记本电脑自动打开。)
发布于 2020-04-22 19:21:16
读取日志文件是调试问题的最佳方法。
因此,在终端中尝试这个命令来获取系统日志,这将告诉您“唤醒”历史记录。
log show --style syslog | fgrep "Wake reason: EC.LidOpen"
要了解觉醒的原因:
macOS Sierra,Mojave,Catalina和更新版本
log show |grep -i "Wake reason"
或者是MacOS El Capitan,Yosemite,小牛和更年长的
syslog |grep -i "Wake reason"
这将看起来像:
MacBookPro kernel[0] : Wake reason = OHC1
MacBookPro kernel[0] : Wake reason = PWRB
MacBookPro kernel[0] : Wake reason = EHC2
MacBookPro kernel[0] : Wake reason = OHC1
,那么这些唤醒原因代码是什么意思?
可能还有其他一些代码(如PCI、GEGE等),但以上是大多数人在系统日志中会遇到的代码。一旦你发现了这些代码,你就可以真正缩小导致Mac从睡眠中醒来的原因,这似乎是随机的。
希望这会有所帮助:)
发布于 2020-04-21 22:50:55
这个答案是基于Linux的,所以它可能并不严格适用于Mac。为了确定rtcwake
是否负责您的MacOS唤醒,您可以用一个包装器脚本替换可执行文件(在我的Ubutnu中是/usr/sbin/rtcwake
),该脚本留下了运行rtcwake
的迹象。
$ cd /usr/sbin/rtcwake
$ sudo mv rtcwake rtcwake_orig
然后编写包含以下内容的脚本/usr/sbin/rtcwake
#!/bin/bash
touch $HOME/rtcwake_ran
/usr/sbin/rtcwake_orig
脚本的变体将取决于您的shell。特别是,在最后一行中,您可能会以另一种方式运行rtcwake
,以便不拥有进程(nohup
/ disown
)。请参阅https://unix.stackexchange.com/questions/152310/how-to-correctly-start-an-application-from-a-shell
要检查唤醒的可能原因,您可以在/var/log
查看各种相关日志。例如,syslog*
,acpi*
。另见https://unix.stackexchange.com/questions/83036/where-is-the-log-for-acpi-events
你有wakeonlan
吗
发布于 2020-04-24 03:00:43
在这里,我记录了我的系统方法。它大致是基于@vijay-rajpurohit的答案,并且是由@vijay-rajpurohit提出的,而这个答案又是基于@Robert @1431720的评论。请注意,根据下面所示的日志,最后的结果是特定于我的MacOS机器的。在您的MacOS中,这将是不同的。
在第一次尝试中,我首先使用:log show --style syslog | grep ...
检查了日志,但是花费的时间太长了。在浏览了/var/log/wifi.log
之后,我意外地检查了/var/log/
(我对/var/log/powermanagement/*.asl
也很好奇)。
事实证明,这是最有用的:
cat /var/log/wifi.log|grep -i "Wake reason"
然后找到这一行:(注意EC.
位)
Thu Apr 23 22:41:32.359 Info: <airportd[219]> _systemWokenByWiFi: System wake reason: <EC.ARPT>, was woken by WiFi
然后搜索EC.ARPT
,我发现了以下命令:
pmset -g log
有用的统计“总体睡眠/唤醒自启动”。pmset -g assertions
这个结果显示了这个问题的全部答案:2020-04-24 02:23:38 +0100
Assertion status system-wide:
BackgroundTask 1
ApplePushServiceTask 0
UserIsActive 1
PreventUserIdleDisplaySleep 0
PreventSystemSleep 0
ExternalMedia 0
PreventUserIdleSystemSleep 0
NetworkClientActive 0
Listed by owning process:
pid 111(hidd): [0x0000200a000986a9] 00:00:00 UserIsActive named: "com.apple.iohideventsystem.queue.tickle.4295010950.3"
pid 85(apsd): [0x0003b830000b90bd] 00:00:10 ApplePushServiceTask named: "com.apple.apsd-waitingformessages-push.apple.com"
Kernel Assertions: 0x100=MAGICWAKE
id=504 level=255 0x100=MAGICWAKE mod=24/04/2020, 01:57 description=en0 owner=en0
Idle sleep preventers: IODisplayWrangler
简而言之,在一种系统的方法中,我根据日志搜索了以下关键字,并对每个关键字进行了搜索:
大多数信息项目都是从pmset -g assertions
的输出中产生的。例如,下面一行中的ApplePushServiceTask
:
pid 85(apsd): [0x0003b830000b90bd] 00:00:10 ApplePushServiceTask named: "com.apple.apsd-waitingformessages-push.apple.com"
在我的特殊情况下(不是一般的解决方案),似乎有效的解决方案是禁用:使用/System/Library/LaunchDaemons/com.apple.apsd.plist
的launchctl
。但是,除非您在安全模式下执行csrutil disable
,否则无法执行此操作。我在这里不写指令,因为它需要小心,您需要稍后启用它。
(待更新)
https://stackoverflow.com/questions/61155792
复制相似问题