fr24feedが正常に自動起動するようにする

この記事は、自宅に設置したアンテナとRTL-SDRレシーバで航空機の飛行状況を取得し、FlightRadar24にフィードして情報共有する話の続き。fr24feedはデータをフィードするソフトウエア。piawareはFlightAwareにフィードするソフトウエア。dump1090-faはRTL-SDRレシーバで受信したADS-Bの信号を文字にして出力するデコーダソフトウエア。

先日の設定で、fr24feedが一応正常に動いているようなのだが、システムを再起動するとfr24feedのFR24 MLATでフェイルが発生する。この状態だとFlightRadar24では「接続しているがオフライン」という扱いになるみたい。フィードが停止するようなのでそれは困る。

$ fr24feed-status
[ ok ] FR24 Feeder/Decoder Process: running.
[ ok ] FR24 Stats Timestamp: 2020-03-12 10:15:00.
[ ok ] FR24 Link: connected [UDP].
[ ok ] FR24 Radar: *-******.
[ ok ] FR24 Tracked AC: 0.
[ ok ] Receiver: connected (0 MSGS/ SYNC).
[FAIL] FR24 MLAT: not running ... failed!

要するに異常だが、これはfr24feedサービスを再起動すると正常になる。
つまりfr24feedの起動タイミングが悪いっぽい。

systemdによるサービスの起動順序とタイミングを調べてみる。

$ systemd-analyze plot > ~/systemd-analyze.svg
ホームディレクトリに出力されたsystemd-analyze.svgは一応画像形式だけど、ブラウザで見るのがおすすめ。

systemdのサービス起動順序 1
これによるとdump1090-faが起動してからfr24feedが立ち上がり、後にpiawareが起動している。fr24feedよりpiawareが先の方が良い筈なので順序指定をしてやれば良さそう 。しかし、仮にfr24feedをpiawareより後にしても、piaware起動開始とほぼ同タイミングだとまだ失敗する可能性がある。Linuxの普通の作法では、おそらくサービスはrc.localが実行される前に全て起動させるのだろうが、rc.localの中でdump1090exporterを起動する前に20秒ほどsleepする処理を入れているのでこれが待ち時間としては最適かもと思った。だから、fr24feedはrc.localの後に実行させることにした。これならpiawareの起動開始タイミングから20秒(と少し)後にfr24feedが起動する筈。

例によって fr24feed を停めて無効化してからサービスのファイルを編集して有効化させる。

$ sudo service fr24feed stop   ←サービス停止
$ sudo systemctl disable fr24feed ←サービス無効化

/etc/systemd/system/fr24feed.service (ファイルの最初の辺りを編集)
[Unit]
Description=Flightradar24 Decoder & Feeder
#After=network-online.target  ←元の設定をコメント化、または行削除
After=rc-local.service   ←変更後(追加した)

$ sudo systemctl enable fr24feed ←サービス有効化
$ sudo shutdown -r now   ←システム再起動

systemdのサービス起動順序 2
システム起動後に再度サービスの起動順序とタイミングを確認する。
今度は指定通りに最後の方のrc-localサービスが完了した後にfr24feedが起動している。

2020年5月21日追記:
上の起動タイミングをズラしただけで暫く満足していたが、これでもまだfr24feedのFR24 MLATがエラーになることがあった。そこで、もっと起動を遅らせることに。
上で編集したのと同じ /etc/systemd/system/fr24feed.service に1行挿入。LimitCORE=infinityの次あたりに。
ExecStartPre=/bin/sleep 90
これでfr24feedの起動をさらに90秒遅らすことができる。これだけ遅ければシステム起動直後の高負荷は完全に避けられるし、flightawareも安定した状態になっているはず。これならきっとFR24 MLATもエラーにならないことでしょう。

$ fr24feed-status
[ ok ] FR24 Feeder/Decoder Process: running.
[ ok ] FR24 Stats Timestamp: 2020-03-12 11:01:27.
[ ok ] FR24 Link: connected [UDP].
[ ok ] FR24 Radar: *-******.
[ ok ] FR24 Tracked AC: 7.
[ ok ] Receiver: connected (16266 MSGS/0 SYNC).
[ ok ] FR24 MLAT: ok [UDP].
[ ok ] FR24 MLAT AC seen: 4.

ステータス表示も意図したとおりになった。(確認はfr24feed起動後1分は待ってから)

関連記事:

コメント: fr24feedが正常に自動起動するようにする

  1. 2020/05/21 の追記情報ありがとうございます。
    参考にさせていただきました。

コメントは締め切られています。