manabu-yoshioka-arc
2025年3月28日 12時11分
==========
製品型番:armadillo-iot-a6
Debian/ABOSバージョン:Linux armadillo 4.14-at65 #1 Mon Jan 29 14:43:02 JST 2024 armv7l GNU/Linux
カーネルバージョン:4.14-at65
3G/LTE モジュール情報 (Debianのみ):
その他:
==========
ソーラーパネル+バッテリーを使った機器で、armadillo-iot-a6 を利用したシステム開発を行っています。
可能な限り省電力を実現したく、aiot-alarm-poweroff コマンドを使った間欠運転の実験をしています。
下記のようなスクリプトで動作検証を行いました。
sleep 150 # 電源ON後、通信が確立するまでの時間調整 $BIN_DIR/rebootReporter 1>/dev/null 2>/dev/null & # リブートをサーバに通知 $BIN_DIR/reportCondition 1>/dev/null 2>/dev/null & # 状態をサーバーに通知 sleep 30 # 次の10分後まで電源断 (sleep(150+30)での3分はここまで経過) CurrentTime=`date +%s` Next10minutesEveryHour=$(( (CurrentTime / 60 + 7) * 60 )) - 30 Next10minutesTime=`date +%s --date @$Next10minutesEveryHour` RemainSecsUntilNext10minutesTime=$(( Next10minutesTime - CurrentTime )) if [ "$RemainSecsUntilNext10minutesTime" -lt 180 ]; then RemainSecsUntilNext10minutesTime=180 fi sudo aiot-alarm-poweroff +$RemainSecsUntilNext10minutesTime
サーバー側の記録の一部を下記に記載します。
"#912 45.2KP","2025-03-28 01:50:48",リブート → 差分: 420秒 "#912 45.2KP","2025-03-28 01:57:48",リブート → 差分: 420秒 "#912 45.2KP","2025-03-28 01:58:35",リブート → 差分: 47秒 "#912 45.2KP","2025-03-28 02:04:48",リブート → 差分: 373秒 "#912 45.2KP","2025-03-28 02:11:48",リブート → 差分: 420秒 "#912 45.2KP","2025-03-28 02:18:48",リブート → 差分: 420秒 "#912 45.2KP","2025-03-28 02:25:49",リブート → 差分: 421秒
まず、10分間隔での再起動を目指していたのですが、スクリプトの sleep 命令はそこで待つのではなく、そのまま先に実行が進むようで、7分の追加ではなく、10分の時間追加にすべきというのは私の側のミスだというのはわかりました。
質問は、途中の 47 秒でのリブート、その後の 373 秒のリブートです。
47 + 373 = 420 になるので、足すと 420 秒になっています。
この症状について、何か考えられることがあればコメントをお願いします。
秒数とターミナルから見て、
$BIN_DIR/rebootReporter 1>/dev/null 2>/dev/null & # リブートをサーバに通知
部分での、スクリプトがもう一度走っているのか、あるいは リブートの通信 (curl を使用してのhttp通信)でのリトライかもしれませんが。
よろしくお願いします。
コメント
at_shota.shimoyama
アットマークテクノの下山です。
提示していただいたプログラムを参考にこちらでも実行してみましたが、しっかり10分後に起床しました。
ちなみにですが、
Next10minutesEveryHour=$(( (CurrentTime / 60 + 7) * 60 )) - 30
は
Next10minutesEveryHour=$(( (CurrentTime / 60 + 7) * 60 - 30))
の間違いではないでしょうか?
前者の方だとエラーが出力されました。
また、sleepが無視されるような挙動についてですが、
sleep 150 # 電源ON後、通信が確立するまでの時間調整
の部分で何かしらの理由でエラーが発生していてスキップしているのかもしれません。
試しにコメントの部分を消してみていただけますでしょうか?
もしそれでもダメであれば、
sudo aiot-alarm-poweroff +$RemainSecsUntilNext10minutesTime
の部分をコメントアウトして、徐々に原因を切り分けていくしかないと思います。
よろしくお願いします。
manabu-yoshioka-arc
manabu-yoshioka-arc
2025年3月28日 17時21分
先の質問で、`aiot-alarm-poweroff +180以上` を指定しているのに、数十秒後にリブートしている、はリブートをレポートする curl プログラムの再送信でした。申し訳ございません。こちらの質問は、取り下げさせていただきます。
残りの質問は、以下です。お手数ですがアドバイスいただけると助かります。
スクリプトは先にも書いたように
です。sleep で 計 180 秒待たせているので、10分毎にリブートしようとしていて残りの7分 420秒相当
を実行しています。
ところが、実際のリブートの様子を見ていると 7分単位でのリブートとなっています。
簡単なテストで以下もしてみました。
やはり sleep 経過後の date コマンドは2分経過した値が返ってきています。
スクリプトでも試してみました。
結果は
で、おおよそ 120秒の経過タイムになっています。
つまり私の実行しているスクリプトでは、sleep の経過時間が CurrentTime に含まれず、無視されているような挙動となっています。
間違いの指摘、テスト項目のアドバイスなど頂けましたら、助かります。