Edited at

Mac上で暴走するClipyを鎮める

More than 1 year has passed since last update.

クリップボードを拡張する「Clipy」は重宝しているのですが、たまに暴走していてmacが轟音をあげることがしばしば…

というわけで、ClipyのCPU使用率とメモリ使用量を監視して、Clipyが暴走したら自動でアプリを再起動させます。


参考


手順

1.「terminal-notifier」をインストール

Clipyの暴走を知らせるために後々使います

$ brew install terminal-notifier

2.Clipy起動スクリプト作成


~/Documents/applescripts/runClipy.scpt

tell application "Clipy" to run


3.監視用shellスクリプト作成

※9行目のCPU使用率とメモリ使用量は適宜変更


~/Library/LaunchAgents/watchclipy.sh

#!/usr/local/bin/zsh

set -A array $(ps aux -m | grep Clipy | grep -v grep | grep $USER)
if [ $(echo $array |wc -w) -eq 0 ]
then # Clipyが起動してなかったら通知・起動
terminal-notifier -message 'Clipy is dead!!'
osascript ~/Documents/applescripts/runClipy.scpt
else # メモリ消費量が128MBを超えてる or CPU使用率が10%以上ならkill
if [ $array[6] -gt 128000 -o $(echo "$array[3]>10" | bc) -eq 1 ]
then
kill $array[2] && terminal-notifier -message 'Clipy was killed.'
osascript ~/Documents/applescripts/runClipy.scpt
fi
fi


4.LaunchAgents用のplistを作成

※下記の場合、60秒毎にshellが動きます


~/Library/LaunchAgents/watch.clipy.agent.plist

<?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>watch.clipy.agent</string>
<key>ProgramArguments</key>
<array>
<string>/Users/akimats/Documents/sh/watchclipy.sh</string>
</array>
<key>StandardErrorPath</key>
<string>/dev/null</string>
<key>StandardOutPath</key>
<string>/dev/null</string>
<key>StartInterval</key>
<integer>60</integer>
</dict>
</plist>

5.Launchdへ登録

$ launchctl load ~/Library/LaunchAgents/watch.clipy.agent.plist

6.Launchdへ登録されているか確認

$ launchctl list | grep watch.clipy.agent


結果

Clipy was killed!!!!!

スクリーンショット 2017-12-27 12.47.03.png

※ちゃんと生き返らせてます。メッセージは適宜変更して下さい。