Raspberry PIで自動実行

Linux

コンパニオンコンピューターのRaspberry PIを起動すると、いくつか自動で開始してほしいプログラムがあります。
私の場合は、Raspiに割り振られたアドレスを表示するディスプレイプログラム、LTE USBモデムのための自動ダイアルアップMAVProxyです。

ディスプレイプログラム

I2CLCD AQM0802の投稿ではネットワークアドレスを自動で表示させているので、sysctrlに登録しました。

ダイアルアップ

RasPIにLTE USB UX302NCを接続のでLTE USBドングルを使用可能としました。
udevに登録しているので使用可能とはなります。
が、繋げばダイアルアップコマンドWVDIALを自動スタートしたい。

ということでダイアルアップはwvdial.serviceを作ってみました。
(ダイアルアップってアイキャッチ画像に載せたように、電話で電話番号ダイヤルして、ピーって搬送波の音がしたらモデム部分に受話器を載せてたんだよなぁ。)

/etc/systemd/systemフォルダーに以下を作成しましたが、うまくいかないです。

[Unit]
Description wvdial service
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/wvdial
ExecStop=/bin/kill -HUP &MAINPID

[Install]
WantedBy=multi-user.targetり

理由は/dev/modemが出来上がる前に何度かリトライして終了します。
ネット検索したら、他の人はこれで繋がってるんですが、タイミングの問題なんでしょうね。

udevにコマンドを登録すれば、たしかにUSBドングルを差し込んで必要な処理はなされます。
しかし、それで/dev/modemが出来上がってから、使うコマンドを発行することはできませんでした。
systemdのAfterパラメーターで依存関係は書けるのですが、プロセスのみ。

ということで自分のフォルダーにこんなスクリプトを作りました。
いろいろ考えて、ずっと無限ループしてるほうがいいということでこうなりました。
lsコマンドで/dev/modemのオープン状態も調べてみたのですが、どうもそれだけじゃ稼働状況を調べられないのと、コマンドだしても”/dev/modemは今、ビジーだよん”と却下されるだけなので、これでいいか、と。

#!/bin/bash

while true
do
  if [ -e /dev/modem ]; then
    /usr/bin/wvdial
  fi
  sleep 30
done
chmod +x dialup.sh

しときます。

これを起動するために /etc/systemd/system/dialup.sh を作ります。

[Unit]
Description=wvdial service
After=network.target

[Service]
Type=simple
ExecStart=/home/tsukasa/dialup.sh

[Install]
WantedBy=multi-user.target

あとはService登録の手順

sudo systemctl enable dialup.service
sudo systemctl start  dialup.service
sudo systemctl status dialup.service

これでブートしてUSBを差し込んでちょっと待つと自動的にダイアルアップモデムも立ち上がります。
USBメモリーさしこまなかったら、ずーっとループしていますが、利便性を考えたらそんなもんでしょう。

意外に苦労しました。cronの@bootなど試してうまくいかず、現時点、結果的にこれです。
ひょっとしたらdaialupが落ちるようならば、cronにdialupさせたほうがいいのかもしれません。まだ、わかりません。

MAVProxy

英語のディスカッションを読むとかなり難しいことをしているか、crontabを使っています。

せっかくdaemonモードがあるので、サービス化してみます。

/etc/systemd/system/mavlink.service を作りました。

[Unit]
Description = Pixhawk to mavproxy daemon
After=network.target

[Service]
Type=simple
User = tsukasa
WorkingDirectory = /home/tsukasa/
ExecStart=/home/tsukasa/Mavlink.sh

[Install]
WantedBy=multi-user.target

WorkingDirectoryの指定が大事でした。
もちろんmavlink.shを作ります。

#!/bin/bash
/home/tsukasa/.local/bin/mavproxy.py --master /dev/ttyAMA0 --baudrate 57600 --out tcpin:0.0.0.0:5760 --daemon
chmod +x mavlink.sh

しときます。

当然ですが、Pixhawkのテレメトリーは最初から接続した状態でなければいけません!

タイトルとURLをコピーしました