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

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

ただいまの
回答率

90.33%

  • Python

    9215questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Linux

    4043questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Raspberry Pi

    898questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

  • cron

    182questions

    cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

cronの実行ができません。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,614

techno

score 10

前提・実現したいこと

定期的に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/16 14:56

    otnさんお返事して頂いてありがとうございます
    ご指摘ありがとうございます。勉強になります

    いろんなサイトを調べているうちに意味も分からず記述してしまったみたいです
    もともとメールアドレスは設定しないで使用しようと思っていたのです

    otnさんのご指南の様にすると

    -bash: /var/log/cron: そのようなファイルやディレクトリはありません

    と返事が来てしまいます

    キャンセル

  • 2017/03/16 15:39

    MAILTOに何も設定していないと、crontabに登録作業を行ったユーザ宛にメールが来ます。

    > と返事が来てしまいます
    そういうメールが届いたということですか?それはちょっと考えにくいです。

    キャンセル

  • 2017/03/16 15:57

    crontabに登録作業時に特にメールの設定をしていないのです
    メールは届いていません
    登録作業時にたしか「設定なし」という項目を選んでしまったような気がします

    すみません
    言葉足らずになってしまいました
    /var/log/cron と実行すると

    pi@raspberrypi:~$ /var/log/cron
    -bash: /var/log/cron: そのようなファイルやディレクトリはありません

    と表示されます
    can110さんからの助言により

    cat /var/log/syslog | grep CRON

    ログを表示する事が出来ました

    メールを設定しない(送信しない)で使うことは可能なのでしょうか?

    キャンセル

  • 2017/03/16 17:39

    > /var/log/cron と実行すると
    それは実行するものではありません。

    > crontabに登録作業時に特にメールの設定をしていないのです
    crontab登録作業時にメールの設定をすることはありません。

    > 登録作業時にたしか「設定なし」という項目を選んでしまったような気がします
    なのでこれは勘違いです。OSインストール時の間違いでしょうか?

    > メールを設定しない(送信しない)で使うことは可能なのでしょうか?
    OSにメールサーバー(Postfixとか)をインストールしなくてもcrontabは使えます。メールが送られずエラーに気づかないだけです。

    キャンセル

  • 2017/03/16 17:39

    そもそも、cronからでなく、コマンドラインでは正しく動くのでしょうか?

    キャンセル

  • 2017/03/17 15:27

    otnさんお返事遅くなり申し訳ありません

    コマンドラインからはちゃんと動いてくれています

    キャンセル

  • 2017/03/17 17:13

    > コマンドラインからはちゃんと動いてくれています

    カレントディレクトリがホームディレクトリの状態で動きますか?

    キャンセル

  • 2017/03/21 13:24

    otnさん
    こんにちは、お返事遅れてしまって申し訳ありません
    天気のプログラムは
    home/pi/tenki.py     において有りましてhoemからは動かないです

    これまでの経過を追加しておきましたのでよろしければご覧になって下さい

    キャンセル

  • 2017/03/21 14:45

    > hoemからは動かないです

    ではそれが原因です。
    特定のディレクトリでしか動かないなら、
    */2 * * * * cd そこ; python /home/pi/tenki.py
    としてください。

    キャンセル

  • 2017/03/21 15:10

    otnさん
    ありがとうございます

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

    としたのですが何にも反応がないです

    tenki_err.logのログを見たのですが下記のようになっていてどうすればいいのか行き詰まりの状態です

    OSError: [Errno 2] No such file or directory
    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__

    キャンセル

  • 2017/03/21 15:16

    > cd home/pi

    cd /home/pi の間違いでは?
    タイプミスくらいは自分で何とかしてください。

    キャンセル

  • 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/16 14:50

    can110さん前回からご指南ありがとうございます

    上記の
    >標準+エラー出力のログをとってみる。
    とあるのですがそのままご提示された物をソースコードに記入で大丈夫でしょうか?

    >pythonをフルパスで指定してみる。
    こちらもソースコードに記述してみましたがダメでした

    キャンセル

  • 2017/03/16 15:03

    はい。ソースコードというか既存のcron設定の行の末尾に
    「 1>> /home/pi/tenki_out.log 2>> /home/pi/tenki_err.log」を追加するだけでよいです。
    pythonでの標準出力結果が2分毎に.logファイルに追記されるはずです。
    また、otnさんも指摘されているようにまずは
    cat /var/log/syslog | grep CRON
    なりでCRONログを確認してもよいです。

    キャンセル

  • 2017/03/16 15:23

    can110さん
    お返事ありがとうございます

    早速教えて頂いた
    >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.pyを実行して更にどこかにメールを送っていると言う事でしょうか?

    キャンセル

  • 2017/03/16 15:41

    実行ユーザーの(pi)と書かれた行からコマンドは実行されていると判断できますので、/home/pi/tenki_out.logと/home /pi/tenki_err.logの内容を確認してください。
    また、(root)行ではメールに関するエラーが発生していることが分かります。otnさんの回答にしたがい適切に対処したほうがよいと思います。

    キャンセル

  • 2017/03/16 16:12

    ありがとうございます

    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/16 17:32

    POpen関数による「jsay 3月16日、~」コマンドの実行に失敗していますね。(jsayがないといっている)
    とりあえず「/home/pi/jsay 3月16日、~」とフルパスで指定するようにtenki.pyを修正すれば動くかもしません。
    しかしそれでも動かなかった場合、成功時(これまで)の端末上からの実行と、cron上との「実行環境の違い」が原因と推測できるため、それに絞って別途質問を立てた方がよいです。
    cronから実行したとたん動かなくなるのは、わりとよくあります。

    キャンセル

  • 2017/03/16 17:57

    この質問だけを見た人は、これまでの流れが分からないので、質問本文に、これまでの流れ(前回の質問内容へのリンク)と、ターミナルで実行した結果(成功するか?)を追記したほうがよいです。

    キャンセル

  • 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で質問しよう!

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

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

  • Python

    9215questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Linux

    4043questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Raspberry Pi

    898questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

  • cron

    182questions

    cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。