ツタンラーメンの忘備録

プログラミングや精神疾患、ラーメンについて書いていきます。たぶん。

Raspberry PIでPythonのプログラムが動かなくて嘆いたけどどうにかなった(短い)

PythonSlack に現在の気圧を通知するプログラムを書いていました。

むっちゃ情けないんだけど上記ツイートの通り必要なチャンネルにbotを追加していなくて時間を溶かしました。 2時間って書いたけど、4時間くらい溶かした気がする。

で、 Slack だけじゃなくて、 Google Spread Sheet にも記録を残したいなと考えました。

tanuhack.com 内心「どんなエラーが待ち構えているのか」とびくびくしていたのですが、なんのエラーもなく上記のままで行けました。(2020-01-25現在)

で、 Rapberry PIcron で動かそうとしたけど Slack 通知は来るのに、 Spread Sheet は更新されないわけです。 普通に叩くと動くのに…。

APIのせいかなとも疑ったのですがパスの設定でした。

  1. Pythonのパス
  2. app.py のパス
  3. プログラム中のパス
  4. MTA
30 * * * * python app.py

って書くわけじゃないですか。

make.bcde.jp

記法は上記が分かりやすかったです。

qiita.com ノリでログまで設定する。 ログで出てくる情報限られているので、そこはまた今度設定する。

ログを設定して見るとどうやらエラーが。。。 No MTA installed, discarding output みたいな。 MTA がないといわれる。普通のLinuxにはデフォルトで入っているけどRasbianには入っていないらしい。

qiita.com

上記のようにエラーと対処

sudo apt-get install postfix

動かない

which python

これで

30 * * * * /path/to/python app.py

。。。だめ

30 * * * * /path/to/python /path2/to2/app.py

。。。だめ 正確に言うとここで Slack 通知まではちゃんと来る。

ただ、 Spread Sheet がだめ。更新されない。

わからなかったんだけど、ソースコード中のパスもフルパスである必要がある。

上記の例だと

credentials = ServiceAccountCredentials.from_json_keyfile_name('file_name.json', scope)

=>

from os.path import join, dirname
credentials = ServiceAccountCredentials.from_json_keyfile_name(join(dirname(__file__), 'file_name.json), scope)

みたいな。 わからん。

ちなみに

os.getcwd()

上記はだめ。

join(dirname(__file__), 'file_name.json)

の挙動はいまいちわかっていない