Raspberry PIでPythonのプログラムが動かなくて嘆いたけどどうにかなった(短い)
Python
で Slack
に現在の気圧を通知するプログラムを書いていました。
Slack Api、botをワークスペースに参加させてなくて、2時間くらい溶かした
— キャリーラーメン (@hungrykirby) January 25, 2020
むっちゃ情けないんだけど上記ツイートの通り必要なチャンネルにbotを追加していなくて時間を溶かしました。 2時間って書いたけど、4時間くらい溶かした気がする。
で、 Slack
だけじゃなくて、 Google Spread Sheet
にも記録を残したいなと考えました。
tanuhack.com 内心「どんなエラーが待ち構えているのか」とびくびくしていたのですが、なんのエラーもなく上記のままで行けました。(2020-01-25現在)
で、 Rapberry PI
の cron
で動かそうとしたけど Slack
通知は来るのに、 Spread Sheet
は更新されないわけです。
普通に叩くと動くのに…。
APIのせいかなとも疑ったのですがパスの設定でした。
- Pythonのパス
app.py
のパス- プログラム中のパス
- MTA
30 * * * * python app.py
って書くわけじゃないですか。
記法は上記が分かりやすかったです。
qiita.com ノリでログまで設定する。 ログで出てくる情報限られているので、そこはまた今度設定する。
ログを設定して見るとどうやらエラーが。。。
No MTA installed, discarding output
みたいな。
MTA
がないといわれる。普通のLinuxにはデフォルトで入っているけどRasbianには入っていないらしい。
上記のようにエラーと対処
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)
の挙動はいまいちわかっていない