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

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

ただいまの
回答率

88.92%

cronの実行ができません。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,061

techno

score 21

前提・実現したいこと

定期的にpythonのプログラムを実行したいです

プログラムの内容は天気予報を喋ってくれるプログラムです
朝9時に知れせてくれる様にしたいです

今は確認&実験の為に2分置きに設定してあります

該当のソースコード

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command


MAILTO=""

#毎時2分にプログラムを実行する
*/2 * * * * python /home/pi/tenki.py

試したこと

いろんなサイトを見て設定したのですが起動してくれません
更にいろいろ実験(設定)し過ぎたのか?正しく動いているのかすらも怪しい状況です

補足情報(言語/FW/ツール等のバージョンなど)

今pythonの勉強中でして何か目的を持って勉強するのが良いと考えRaspberry Piで何かできないかなと思い
今に至ります。まだまだ未熟でしてどなたかご教示頂けると幸いです
よろしくお願い致します

**追記**
これまでの流れです

実行したいプログラムの後にログを表示する記述とフルパスになる記述を足しました。

*/2 * * * * python /home/pi/tenki.py 1>> /home/pi/tenki_out.log 2>> /home/pi/tenki_err.log

次に
cat /var/log/syslog | grep CRON  を教えて頂き
ログを表示する事が出来ましました

Mar 16 15:10:01 raspberrypi CRON[6690]: (root) MAIL (mailed 548 bytes of output but got status 0x004b from MTA#012)
Mar 16 15:12:01 raspberrypi CRON[6721]: (root) CMD (python /home/pi/tenki.py)
Mar 16 15:12:01 raspberrypi CRON[6725]: (pi) CMD (/usr/bin/python /home/pi/tenki.py 1>> /home/pi/tenki_out.log 2>> /home /pi/tenki_err.log)
Mar 16 15:12:01 raspberrypi CRON[6715]: (root) MAIL (mailed 548 bytes of output but got status 0x004b from MTA#012)
Mar 16 15:14:01 raspberrypi CRON[6747]: (root) CMD (python /home/pi/tenki.py)
Mar 16 15:14:01 raspberrypi CRON[6750]: (pi) CMD (/usr/bin/python /home/pi/tenki.py 1>> /home/pi/tenki_out.log 2>> /home /pi/tenki_err.log)
Mar 16 15:14:01 raspberrypi CRON[6739]: (root) MAIL (mailed 548 bytes of output but got status 0x004b from MTA#012)
Mar 16 15:16:01 raspberrypi CRON[6773]: (root) CMD (python /home/pi/tenki.py)
Mar 16 15:16:01 raspberrypi CRON[6776]: (pi) CMD (/usr/bin/python /home/pi/tenki.py 1>> /home/pi/tenki_out.log 2>> /home /pi/tenki_err.log)
Mar 16 15:16:02 raspberrypi CRON[6766]: (root) MAIL (mailed 548 bytes of output but got status 0x004b from MTA#012)


↑一部抜粋です

更に
tenki_out.log  を確認しました所

jsay 3月16日、15時56分
jsay 3月16日、15時58分
jsay 3月16日、16時0分
jsay 3月16日、16時2分
jsay 3月16日、16時4分

続いて
tenki_err.log   を確認しました所

-bash: */2: そのようなファイルやディレクトリはありません
-bash: */2: そのようなファイルやディレクトリはありません
Traceback (most recent call last):
File "/home/pi/tenki.py", line 65, in <module>
main()
File "/home/pi/tenki.py", line 12, in main
say_datetime()
File "/home/pi/tenki.py", line 20, in say_datetime
proc = subprocess.Popen(shlex.split(text))
File "/usr/lib/python2.7/subprocess.py", line 710, in init
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1335, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

の繰り返しでした

以上が今までの経緯です。

更に追記です(2017/03/21)

前回ご質問させていただき解決したプログラムです

Raspberry piで天気予報を実行したいのですがエラーが出て実行できません。
https://teratail.com/questions/68697

このプログラムを使いcronで定期的にしゃべってもらいたいです

参考にしましたサイト↓

Raspberry Pi | 毎朝、東京の天気予報をしゃべってもらう(お天気Webサービス)
http://www.tapun.net/raspi/raspberry-pi-talk-weather

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+3

まず、

起動してくれません 

という認識が間違っていると思われます。ログ /var/log/cron で確認しましたか?
おそらく、起動はしているが、エラーになっているのだと思います。

さらに、MAILTO=""と書くのが間違っています。
cronは、実行したコマンドがエラー終了したり、標準出力、標準エラー出力に出力したものをメールで送ってくれるという便利な機能があるのに、それを殺してしまっています。
MAILTOの行を消すか、あるいはメールアドレスを設定して、メールを見てください。
もちろん、メール送信可能な設定になっている必要がありますが。

追記

最初の回答は原因の調べ方だけで、コメントを全部見ないと解決策に行き当たらないので、ここに書いておきます。
実はPythonから外部コマンドを起動しているが、そのコマンドがフルパスでなく、cron標準のPATHにも無かったので、起動に失敗していたというのが原因です。
解決策は、PATHをログイン時と同じように設定すること。

環境変数はcronでうまくいかないことの定番原因ですが、今回はpythonコマンド自体は起動に成功しているので判明が遅れました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/21 15:22

    otnさん
    出来ました!!!

    このサイト
    コンソールで叩くと動くスクリプトがCronで動かない時
    http://higelog.brassworks.jp/1775

    を見ていて
    起動させたい時間の記述の所に下記の記述を挿入したらしゃべってくれました
    PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin

    こんな初心者に付き合って頂いて本当にありがとうございます
    上手く行かなくて申し訳なかったと同時に事細かく助言して頂いてとても嬉しかったです
    本当にありがとうございました

    キャンセル

  • 2017/03/21 15:25

    「cd home/pi」でも「cd /home/pi」でもどちらでも行けました

    キャンセル

  • 2017/03/21 18:48

    > 起動させたい時間の記述の所に下記の記述を挿入したらしゃべってくれました
    > PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin

    ということは、純粋なPythonスクリプトじゃなくて、そこから外部コマンドを呼び出していたということだったんですかね。
    と、エラーメッセージを見ると、
    > proc = subprocess.Popen(shlex.split(text))
    Popenがありますね。この起動するコマンドをそもそもフルパスで書いておけばよかったのです。

    キャンセル

+2

Raspberry piで天気予報を実行したいのですがエラーが出て実行できません。の続きと考え、回答します。

以下を試してみてください。

  • 標準+エラー出力のログをとってみる。
*/2 * * * * python /home/pi/tenki.py 1>> /home/pi/tenki_out.log 2>> /home/pi/tenki_err.log
  • pythonをフルパスで指定してみる。
*/2 * * * * /usr/bin/python ~

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/17 15:30

    can110さんお返事遅くなってしまって申し訳ありません

    これまでの流れを追加しておきました
    助言ありがとうございます

    can110さんから教えて頂いた事を試してみたいと思います
    何か進展がありましたらお返事致します

    キャンセル

  • 2017/03/17 15:52

    追記ありがとうございます。
    ただ、エラーの発生元である /home/pi/tenki.pyの内容がこの質問だけでは分かりません。
    よって、この質問本文にもtenki.pyの内容を追記するか、前回の質問へのハイパーリンクだけでも貼っておいたほうがよいです。

    キャンセル

  • 2017/03/21 12:05

    can110さん
    こんにちは、お世話になっております
    can110さんのおっしゃる通りハイパーリンク追加しました

    細かい配慮ありがとうございます

    キャンセル

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

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る