ラズパイが天気予報を喋らない原因を解決/定時に音声出力

シェアする

Pocket

1.ラズパイが天気予報を喋らない

60爺は、Raspberrypiで天気予報を喋っていただけたので、前回、これを cron に登録しました。

0 8,12,15,20,22 * * * python3 /home/pi/python_pg/open_jtalk/talk_weather_3.py

8,12,15,20,22時に、天気予報をしゃべってくれるはず・・・なんですが、時間になってもしゃべってくれませんね。・・・なんで?

そこで、syslogを見てみました。以下のようなメッセージが出ています。

Jul 26 08:00:35 raspberrypi CRON[7159]: (CRON) info (No MTA installed, discarding output)

どうやら、print文で出力した結果を出せないよと言ってます。ログも出ていません!

2.喋らない原因は?

そこで、ググって、ログを出せるようにしてみました。

cron で > /dev/null して椅子を投げられないための3つの方法

記事に従い、当初のpython実行コマンドを次のように変更しました。

しかし、頭にある実行時が時間指定のままだと、その時間が来るまで延々と待ち続けなくてはならないため、テストには向きません。そのため、2分ごとにしゃべっていただくように変更しました。

*/2 * * * * python3 /home/pi/python_pg/open_jtalk/talk_weather_3.py 2>&1 | logger -t mycommand -p local0.info

すると、ログが出て、jsayがありませんよって言ってます。

???何で?

Jul 22 07:14:01 raspberrypi CRON[15613]: (root) CMD (python3 /home/pi/python_pg/
open_jtalk/talk_weather_3.py 2>&1 | logger -t mycommand -p local0.info)
Jul 22 07:14:01 raspberrypi mycommand: jsay 7月22日、7時14分1秒
Jul 22 07:14:01 raspberrypi mycommand: Traceback (most recent call last):
Jul 22 07:14:01 raspberrypi mycommand: File "/home/pi/python_pg/open_jtalk/talk_weather_3.py", line 68, in <module>
Jul 22 07:14:01 raspberrypi mycommand: main()
Jul 22 07:14:01 raspberrypi mycommand: File "/home/pi/python_pg/open_jtalk/talk_weather_3.py", line 15, in main
Jul 22 07:14:01 raspberrypi mycommand: say_datetime()
Jul 22 07:14:01 raspberrypi mycommand: File "/home/pi/python_pg/open_jtalk/talk_weather_3.py", line 24, in say_datetime
Jul 22 07:14:01 raspberrypi mycommand: proc = subprocess.Popen(shlex.split(text))
Jul 22 07:14:01 raspberrypi mycommand: File "/usr/lib/python3.4/subprocess.py", line 859, in __init__
Jul 22 07:14:01 raspberrypi mycommand: restore_signals, start_new_session)
Jul 22 07:14:01 raspberrypi mycommand: File "/usr/lib/python3.4/subprocess.py", line 1457, in _execute_child
Jul 22 07:14:01 raspberrypi mycommand: raise child_exception_type(errno_num, err_msg)
Jul 22 07:14:01 raspberrypi mycommand: FileNotFoundError: [Errno 2] No such file or directory: 'jsay'

色々とやってみました。jsayのありか(/usr/local/bin)を追記してみたりしたんですが、cronの中では相手にされません。

やっているうちに、これは、PATHだろうと当りが付きました。

3.定時に音声出力復元

cronに、以下の環境変数を追加して解決しました。

PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
# 
# m h dom mon dow command
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
*/15 * * * * sudo sh /home/pi/python_pg/graph_data/display.sh
0 8,12,15,20,22 * * * python3 /home/pi/python_pg/open_jtalk/talk_weather_3.py

師匠50オヤジには「邪道だ」と言われましたが、後から、こんな記事を見つけました。

動いてるから、まア、良しとしましょう。

cron実行時の環境変数を設定

スポンサーリンク

シェアする

フォローする