moode audioを入れたRaspberry Piで、cronの代わりにtimerを使う

moode audioを入れたRaspberry Piで、cronの代わりにtimerを使う

Raspberry Piのオーディオ専用ディストリ”moode audio“。
それに温度記録の機能を追加しようとしたけれど、ジョブを定期実行させるcronが動いてない事が判明。

そこでcrondの追加ではなく、Debianらしくsystemdのtimerを使って同様の処理をKickさせます。

使っているmoode audioのVersionはRelease 4.4 2018-12-09。

やりたかった事

家の赤外線リモートコントローラをNode-Redで動かしていたRPi2がお役御免になりまして。

それに残っていた温度ロギングを使用頻度の低いmoode audioマシンに移そう、としたのが事の始まり。

HiFi-DAC HATにAM2302をはんだ付け。GPIO18経由でデータを取得します。

cronは動いてない

当初は今まで通りのcronで回せばいいやと思っていました。
しかしプロセスを確認してみると、crondがそもそも実行されていない。

# ps aux | grep cron
root 27061 0.0 0.4 4360 1908 pts/0 S+ 00:50 0:00 grep cron

そしてsystemctlのサービス一覧にもありません。

# systemctl | grep -i cron
#

crondはインストールされているけれど、どうやって起動させればいいのか。

systemdで動かすのが今風らしい

調べてみると、以下の事がわかりました。

  • moode audioはcronを止めており、それを動かすと他の定期実行が止まるらしい
  • debianはcrond以外にもsystemdのタイマーにてジョブを定期実行できる

これについては以下のサイトが参考になりました。

手順については概ね参照サイト通りです。

.serviceファイルの作成

まずコマンドを記述する.serviceファイルを作成。
フォルダパスは/lib/systemd/systemでした。

# vi /lib/systemd/system/am2302.service

[Unit]
Description = am2302 temp and humidity uploader

[Service]
Type = oneshot
ExecStart = /usr/local/etc/Adafruit_Python_DHT/sensor/am2302_2_m2x.sh 2>&1 | logger -t am2302_2_m2x -p local0.info

.timerファイルの作成

次に実行タイミングを指定する.timerファイルの作成。

# vi /lib/systemd/system/am2302.timer

[Unit]
Description = am2302 temp and humidity uploader

[Timer]
OnCalendar = *-*-* *:1/10:00

[Install]
WantedBy=timers.target

OnCalenderにcronと同様、実行タイミングを書き込みます。
*はワイルドカードなので、「*-*-* *:1/10:00」は10分ごとに実行の設定。

適用

ファイルを作成したら、リロードして読み込ませ

#systemctl daemon-reload

その後サービスをEnableにします。
シンボリックリンクが貼られました。

# systemctl enable am2302.timer
Created symlink /etc/systemd/system/timers.target.wants/am2302.timer → /lib/systemd/system/am2302.timer.

確認

無事有効化できれば、ジョブのステータスをコマンドで確認できるようになります。
これはcronには無い便利機能。

# systemctl status am2302.timer
● am2302.timer - am2302 temp and humidy uploader
Loaded: loaded (/lib/systemd/system/am2302.timer; enabled; vendor preset: ena
Active: active (waiting) since Mon 2020-02-03 01:08:01 JST; 4s ago
Feb 03 01:08:01 moode2F systemd[1]: Started am2302 temp and humidity uploader.

journalctlコマンドにてログも見れます

# journalctl -u am2302
-- Logs begin at Sun 2020-02-02 17:24:52 JST, end at Mon 2020-02-03 01:08:07 JST
Feb 03 00:48:11 moode2F systemd[1]: Starting am2302 temp and humidity uploader...
Feb 03 00:48:14 moode2F am2302_2_m2x.sh[26929]: 36.2,20.8
Feb 03 00:48:14 moode2F am2302_2_m2x.sh[26929]: % Total % Received % Xferd
Feb 03 00:48:14 moode2F am2302_2_m2x.sh[26929]:
Feb 03 00:48:14 moode2F am2302_2_m2x.sh[26929]: [237B blob data]
Feb 03 00:48:14 moode2F am2302_2_m2x.sh[26929]: HTTP/1.1 202 Accepted
Feb 03 00:48:14 moode2F am2302_2_m2x.sh[26929]: Content-Type: application/json;
Feb 03 00:48:14 moode2F am2302_2_m2x.sh[26929]: X-M2X-VERSION: v2.112.2
Feb 03 00:48:14 moode2F am2302_2_m2x.sh[26929]: Vary: Accept-Encoding
Feb 03 00:48:14 moode2F am2302_2_m2x.sh[26929]: X-RateLimit-Limit: 5
Feb 03 00:48:14 moode2F am2302_2_m2x.sh[26929]: X-RateLimit-Remaining: 4
Feb 03 00:48:14 moode2F am2302_2_m2x.sh[26929]: X-RateLimit-Reset: 1580658495
Feb 03 00:48:14 moode2F am2302_2_m2x.sh[26929]: Content-Length: 21
Feb 03 00:48:14 moode2F am2302_2_m2x.sh[26929]: [1B blob data]
Feb 03 00:48:14 moode2F am2302_2_m2x.sh[26929]: {"status":"accepted"} % Total
Feb 03 00:48:14 moode2F am2302_2_m2x.sh[26929]:
Feb 03 00:48:15 moode2F am2302_2_m2x.sh[26929]: [158B blob data]
Feb 03 00:48:15 moode2F am2302_2_m2x.sh[26929]: HTTP/1.1 202 Accepted
Feb 03 00:48:15 moode2F am2302_2_m2x.sh[26929]: Content-Type: application/json;
Feb 03 00:48:15 moode2F am2302_2_m2x.sh[26929]: X-M2X-VERSION: v2.112.2
Feb 03 00:48:15 moode2F am2302_2_m2x.sh[26929]: Vary: Accept-Encoding
Feb 03 00:48:15 moode2F am2302_2_m2x.sh[26929]: X-RateLimit-Limit: 5

これでmoode audio+温度記録が一台のラズパイで済みます。
測定結果をM2Xでグラフ化する手法などは以下を御覧ください。

コメントを残す