質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1307閲覧

ラズパイで自動起動に成功したり失敗したりする

mo256man

総合スコア43

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/02/29 05:19

前提・実現したいこと

モニターもマウスも接続していないラズパイZero Wで、
0. systemdにてPythonスクリプトを自動起動させ、
0. スクリプトの中でトークン設定等をしてGASにログインし、
0. GPIOで取得したセンサーデータをgspreadでGoogleスプレッドシートに書き込む

という処理をおこなおうとしています。

自動起動そのものは成功しています。ところが、serviceファイルには

[Unit] Description=gas After=network.target 以下略

と記述していて、また、raspi-config でブート時はネットワーク接続確立まで待つ設定にしているにもかかわらず、GASへのログインの段階で成功したり失敗したりと安定しません。
ここに成功した場合はセンサーデータ取得とGoogleスプレッドシートへの書き込みはできています。

原因と対策について助言をいただきたく、よろしくお願いします。

バージョン

  • Raspbian GNU/Linux 9.11 (stretch)
  • Python 3.5.3
  • gspread (3.2.0)
  • oauth2client (4.1.3)

試したこと

開発環境で成功し本番環境で失敗するので、試行錯誤のすえ以下のような傾向があることがわかりました。
技術的な理由があるのか不明です。ほとんどオカルトですね。

  • USBにデバイス接続なしだと失敗する
  • USBに(ハブ経由でも直接でも)キーボードやカメラを接続すると成功する
  • USBに(ハブ経由でも直接でも)マウスを接続しても成功失敗に無関係
  • HDMIモニターの接続有無は成功失敗に無関係

エラーメッセージ

sudo LANG=C systemctl status -l gas (gasは自動起動のサービス名)でログを確認すると以下のようになっています。(見やすくするためタイムスタンプ削除しています)

● gas.service - gas Loaded: loaded (/etc/systemd/system/gas.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Sat 2020-02-29 09:56:04 JST; 8min ago Process: 428 ExecStart=/usr/bin/python3 /home/pi/gas.py (code=exited, status=1/FAILURE) Main PID: 428 (code=exited, status=1/FAILURE) python3[428]: File "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", line 2670, in sign python3[428]: _openssl_assert(final_result == 1) python3[428]: File "/usr/lib/python3/dist-packages/OpenSSL/_util.py", line 61, in openssl_assert python3[428]: exception_from_error_queue(error) python3[428]: File "/usr/lib/python3/dist-packages/OpenSSL/_util.py", line 48, in exception_from_error_queue python3[428]: raise exception_type(errors) python3[428]: OpenSSL.crypto.Error: [('', 'osrandom_rand_bytes', 'getrandom() initialization failed.'), ('rsa systemd[1]: gas.service: Main process exited, code=exited, status=1/FAILURE systemd[1]: gas.service: Unit entered failed state. raspberrypi systemd[1]: gas.service: Failed with result 'exit-code'.

ちなみに、成功した場合のログはこうです。

● gas.service - gas Loaded: loaded (/etc/systemd/system/gas.service; enabled; vendor preset: enab Active: active (running) since Sat 2020-02-29 12:00:16 JST; 2h 8min ago Main PID: 435 (python3) CGroup: /system.slice/gas.service └─435 /usr/bin/python3 /home/pi/gas.py systemd[1]: Started gas.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

SSL処理に必要な乱数を生成できないために発生しているようです。
この乱数の元になるデータはキーやマウス入力などから生成しているのですが、接続していない場合、元データが枯渇(エントロピーが減少)して乱数が生成できなくなります。
解決策としてはRPi 3A+ Failed to make API calls when headlessによるとsudo apt-get install havegedにてHavegedをインストールすればよいようです。
ちなみにBuster: one problem of Raspbian has finally been solved.に記載あるようにBusterでは解消されているようです。

投稿2020/02/29 06:50

can110

総合スコア38341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mo256man

2020/02/29 08:38

USBデバイスの有無がログインに影響していたとは! オカルトではなかったのですね(笑)。 rng-tools で効果確認した後それをアンインストールすることなく Haveged をインストールしたので Haveged 単独の効果確認はしておりませんが、示していただいたサイトの説明にあるように rng-tools も Haveged も効果ありそうですね。 仕組みまで説明していただき、たいへん勉強になりました。どうもありがとうございました。
guest

0

エラーメッセージから見ると乱数発生に時間がかかっているようです。
手元ですぐにテストできる pi がないのですが、

https://community.openenergymonitor.org/t/getrandom-initialization-failed/9769

とかによると、ラズパイはハードウェア乱数発生機能があるようです。一度、以下のコマンドで rng-tools をインストールしてみてください。乱数発生が格段に高速化されて問題を解消できる可能性があります。

$ sudo apt-get install rng-tools

投稿2020/02/29 06:40

mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mo256man

2020/02/29 08:38

エラーメッセージは自分のスクリプトの悪さでなく内部的なエラーであるところまで確認してそれ以降は深読みできていませんでした。 何十回も再起動したわけではありませんが、rng-tools を入れてからは毎回成功しています。 どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問