使用高CPU时通知。通过AppleScript或Automator?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用高CPU时通知。通过AppleScript或Automator?相关的知识,希望对你有一定的参考价值。

每当进程使用超过50%的CPU时,我想自动化 它会向我的通知中心发送通知

我正在使用terminal-notifier发送通知 但是我对创建这种自动化的最佳方法有点困惑。

我应该使用Automator.app还是创建自定义AppleScript,如果是这样, 如何让它永远在线?

答案

如果这是用于交互式使用,请让我建议一个实用的替代方案:

  • 运行活动监视器。
  • 按住Control键并单击其停靠图标。
  • 选择Dock Icon > Show CPU Usage - 或者,对于浮动窗口,Monitors > Show CPU Usage

您将获得当前CPU使用情况的每个核心显示 - 单击它将显示完整的“活动监视器”窗口,您可以在其中按CPU使用情况进行排序。


如果您确实需要自动化解决方案,我建议:

  • 编写一个bash脚本,使用top查找最高CPU百分比的任务,如果超过阈值,则调用terminal-notifier
  • 将该脚本安排为用于定期调用的launchd任务。

Automator和AppleScript可能过于沉重 - 可能是频繁的 - 背景活动。

即使运行top本身也会占用相当多的CPU。


这是一个简单的bash脚本,大致可以满足您的需求:

#!/usr/bin/env bash

read pct name < <(top -l 2 -n 1 -F -o cpu -stats cpu,command | tail -1)
if (( ${pct%.*} >= 50 )); then
  /Applications/terminal-notifier.app/Contents/MacOS/terminal-notifier 
    -message "Process > 50%: $name ($pct%)"
fi

请注意,这需要至少2秒才能运行,因为必须收集2个样本(相隔1秒)来计算CPU使用百分比,因此在确定调用命令的频率时请考虑这一点。

更新 - 请参阅下面的逐步实施说明。

参考文献:


实施自动化解决方案的分步说明:

  • 创建bash脚本: 创建纯文本文件~/watchcpu(即主文件夹中的文件watchcpu),将上面的bash脚本粘贴到其中,然后保存。
  • 在登录时创建用于每次调用的启动代理,然后定期调用: 创建纯文本文件~/Library/LaunchAgents/WatchCPU.plist,将以下XML文档粘贴到其中,然后保存:
<?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>KeepAlive</key>
    <false/>
    <key>Label</key>
    <string>WatchCPU</string>
    <key>ProgramArguments</key>
    <array>
        <string>bash</string>
        <string>-c</string>
        <string>. ~/watchcpu</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StartInterval</key>
    <integer>15</integer>
</dict>
</plist>
  • 加载每用户启动代理以激活它: 在终端中运行以下命令(仅需要一次;从那时起,文件将在每次登录时自动加载):
launchctl load ~/Library/LaunchAgents/WatchCPU.plist

注意:

  • 您可以自由选择自己的文件名和bash脚本的不同位置,但启动代理.plist文件必须位于~/Library/LaunchAgents中才能在登录时自动加载。
  • 间隔(键StartInterval)选择为15秒;再次,您可以自由地更改它,但请注意,选择更频繁的调用没有多大意义,因为launchd(调用启动代理的服务)会限制执行时间过于接近调用间隔的代理程序;我不清楚细节,但在手头的解决方案中,间隔10秒会导致system.log频繁出现限制通知(通过Console.app检查)。
另一答案

您可以轻松地将CPU使用率用于脚本或Automator工作流程。这是一个脚本,您可以安排按计划运行,如果使用率超过50%,将通知:

set theDelay to 3 -- number of seconds to sample the CPU
set CPUusage to do shell script "top -F -l " & theDelay & " -n 1 -stats cpu | grep 'CPU usage:' | tail -1 | cut -d. -f1"
set idlePercent to word -2 of CPUusage as number
if idlePercent < 50 then display notification ("CPU usage is at " & (100 - idlePercent) & "%.") with title "CPU Usage"

请参阅注释以遵循do shell脚本命令的编辑,以允许从shell命令自然获取整数,以便更好地使用非英语系统。

以上是关于使用高CPU时通知。通过AppleScript或Automator?的主要内容,如果未能解决你的问题,请参考以下文章

带有自定义图标的applescript显示对话框

如何制作Mac终端弹出/警报? AppleScript的?

监控 Applescript 中的 Spotify 曲目变化?

有没有办法通过 Shell 脚本、AppleScript 或 Automator 工作流程触发热键/键盘快捷键?

通过 AppleScript 添加 InDesign XMLElements 时如何提高性能?

服务器的cpu温度可以通过snmp采集吗