Mac がスリープから復帰したとき Vagrant を動かしっぱなしだったら通知するようにした
Vagrant を立ち上げたままのを忘れてバッテリーが減るの早いなーおかしいなーというのが何度かあったので、スリープから復帰したとき Vagrant が動いていたら通知を出すようにした。
まずスリープから復帰したタイミングで与えられたコマンドを実行する awakened というツールを書いた: https://github.com/uasi/awakened
awakened のインストール手順はこれ:
git clone https://github.com/uasi/awakened cd awakened make cp awakened ~/bin
awakened は第1引数に実行ファイルへの絶対パスを取り、 Mac がスリープから復帰したらそれを実行する。第2引数以降は実行ファイルに渡される。
awakened /bin/sh ~/.awakenedrc
で、これを launchd でデーモン化した。以下の XML を ~/Library/LaunchAgents/org.exsen.awakened.plist
に置いて launchctl load ~/Library/LaunchAgents/org.exsen.awakened.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>Label</key> <string>org.exsen.awakened</string> <key>ProgramArguments</key> <array> <string>/Users/uasi/bin/awakened</string> <string>/bin/sh</string> <string>/Users/uasi/.awakenedrc</string> </array> <key>KeepAlive</key> <true/> <key>RunAtLoad</key> <true/> </dict> </plist>
launchd.plist では引数のメタキャラクタが展開されないので ~/.awakenedrc などと書かずに絶対パスで書く。詳しくは man launchd.plist
を見る。
~/.awakenedrc
には Vagrant が動いていたら通知するやつを書いた。ついでにスリープ復帰後に不安定になるアプリケーションを再起動するようにした。
# VBoxHeadless プロセスがいたら Vagrant が動いているはず if pgrep -q VBoxHeadless; then osascript -e 'display notification "Vagrant is up and running." with title "awakened"' fi # Should I Sleep を再起動する killall "Should I Sleep" open -a "Should I Sleep"
快適になった。