Mechatraxの電源管理/死活監視モジュールslee-Pi2を入手、これからの開発・調査をするために、先ずはMackerelをインストールしてみた。その後、ごちゃごちゃやっていたら、それなりに今後にも使えそうなものができたので、ここに記録しておく。
詳細な手順等はGitHubで公開中なので、技術的にはもう何も言うことはないのだけど、ここではなぜこのような仕組みになったかを記す。
Raspberry piへの設定作業なので、ansibleのplaybookで実装するのは、この頃の私のデフォルト。一度コード化しておけば、何回も行う作業ならば、作業ミスも防げ、手順等をレビューなどで改善・改良できる。さらには資産にもなるので、もう私の中ではやらない手はないぐらい。
Mackerelを常用していると、その死活監視はその仕組み上リアルタイム性が劣るのを感じていた。特に電源管理・死活監視を司るslee-Piの開発・評価においては致命的になるかと考え、死活監視に関しては独自に実装する必要性を感じたので、boot・shutdown処理において直接slackに投稿する仕組みを実装することに
そのために、systemdのstartstop.serviceとして実装し、boot時に立ち上がったことを、shutdown時にはその旨のメッセージをslackにpostするようにした。当然、slackにはip reachableである前提。
そうこうするうちに、これを使えば、他の事にも使えると考え、実装したのがSTARTUP.shとSHUTDOWN.shをslackを叩くと同様なタイミングで実行する仕組み。
例えば、boot時に
sleep 300&&(sleepi2alarm --set "+5min" && shutdown -h now)
とやれば、5分後に
sleepi2alarm --set "+5min" && shutdown -h now
と投入されることになる。これによって、5分毎に起動・停止を延々と繰り返すRaspberry piができ上がり。
sleepi2alarmについてはsleepi2alarmを参照
さらには、
echo "(sleepi2alarm --set \"tomorrow 9:00:00\"&&shutdown -h)"|at 17:00
とやれば、9-5時にしか稼働しないRaspberry piができ上がります。
同様なシナリオとしては
boot時に
echo "shutdown -h now"|at 17:00
shutdown時に
sleepi2alarm --set "tomorrow 9:00:00"
と実行することでも可能です。
気を付けることとしては、boot時に時刻指定のshutdownコマンドを発行しないこと。例えば、
shutdown "17:00"
と投入すると、shutdownは17時に行われるが、Unprivileged usersがsshでログインできなくなり、色々と面倒なことになる。
これらのSTARTUP.sh/SHUTDOWN.shのコレクションは今後の評価・開発のシナリオに応じて充足していく予定。