ヴァル研究所 Advent Calendar 2017 5日目の記事です。
TLDR
Autostart and StaY!というアプリ(無料)を使うと、指定のアプリを監視し、落ちたとき自動的に再起動できます。
これが何の役に立つの?
弊社ではSkyBrainという低価格バスロケーションシステム(バスロケ)を開発しています。つまりバスにGPS端末を載せて、バスがいつ来るか分かるようにするというシステムです。そのGPS端末としてAndroidスマホを使用しています。
そのAndroidアプリは常時起動しっぱなしで位置情報を送り続けます。ですが、どうしてもときどきアプリが落ちてしまうことがあり、困っていました。そこで逆に「落ちても再起動する」施策を導入したというわけです。
Androidに詳しい方なら自動的に再起動させるアプリを自作するのも難しくないと思いますが、開発者(私)がAndroidアプリを作るのは初めてだったので、無料のアプリを使わせて頂きました。導入以来、100%安定して動いています。作者の方に大感謝です。
「落ちたら再起動させればいい」という発想
乱暴なような気もしますが、考えてみればサーバでは当たり前の発想なんですね。unicorn(Rubyのアプリケーションサーバ)ではリクエスト処理に所定時間以上かかっただけでマスタープロセスはワーカープロセスをkillして新しいワーカーを立ち上げますし、supervisordやsystemdにもそういう機能があります。Googleが安いハードウェアを使って壊れたら交換するというのも同じです。
人間のユーザーが使うアプリだとそうも行きませんが、今回は無人で位置情報を送り続けるというアプリだったので、この発想が使えました。