読者です 読者をやめる 読者になる 読者になる

waste of time

主にPHP

VagrantにSSHログインしたときにアニメ放送情報を表示させる

f:id:tmysz:20160208020429p:plain

今日放送のアニメなんだっけ?と仕事中に気になることはよくあるはず。
見逃せないアニメの日は残業せず帰りたい。 そんな感じの需要を満たすかもしれないソリューションです。

SSHログインしたときに何か表示する

motd(message of the day)を使えば可能らしい。サーバにログインしたときに、/etc/motdの内容がコンソールに出力される。

アニメ放送情報を取得する

拙作Anitimeを使う。

anitimeをインストールする。

# cd ~/
# git clone https://github.com/tmysz/anitime.git
# cp ./anitime/anitime /usr/local/bin/
# chmod a+x /usr/local/bin/anitime

anitimeコマンドを実行すると記事冒頭画像のようにずらーっと放送情報が出てくるはず。表示する局の設定とかは、ホームディレクトリの.anitime/config.jsonに書けば読み込みます。

SSHログインした時にアニメ放送情報を表示させる

SSHログインしたときに、anitime実行結果をmotdに書き出せば良さそう。とりあえず、anitimeを実行してmotdに書き出すシェルスクリプトを準備する。
今環境のPHP環境がphpenvによるもののため、4行目でrbenvの初期化スクリプト(phpenvはrbenvに依存しているため)を実行しています。yum等で入れたPHPの場合は、anitime実行前にPHPのパスを設定する記述を代わりに入れてください。(yumインストールしたphpは何も書かなくてもこの時点で動く(パス通ってる)っぽい?)

#!/bin/sh

# phpenv init
source /etc/profile.d/rbenv.sh

echo -e "======\n`/usr/local/bin/anitime`\n======\n" > /etc/motd

試行錯誤

/etc/ssh/sshrcでupdate_motd.shを実行させようとした

SSHログイン時に/etc/ssh/sshrcが実行されるようなので、この中でupdate_motd.shを実行させてみた。 結果としては、/etc/ssh/sshrcが実行される前にmotdが出力されてしまうためボツ。

cronでupdate_motd.shを実行させようとした

crontabでは、分・時・日・月・週以外にも、@rebootと指定することでサーバ起動時のタスクを登録することが出来る。 vagrant upしたときにmotdに書き込んでくれれば良いので、/etc/crontabに以下のようにタスクを登録した。

@reboot root /etc/update_motd.sh
10 * * * * root /etc/update_motd.sh

サーバ起動時に加えて毎時10分にmotdを書き換えている。 こっちはうまくいった。

f:id:tmysz:20160208020432p:plain

職場の開発環境に入れれば捗るかもしれない。