クリップボードを拡張する「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