前提・実現したいこと
モニターもマウスも接続していないラズパイ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.
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/29 08:38