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

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

新規登録して質問してみよう
ただいま回答率
85.48%
cron

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

Linux

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

Raspberry Pi

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

Python

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

Q&A

解決済

2回答

9135閲覧

cronの実行ができません。

techno

総合スコア22

cron

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

Linux

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

Raspberry Pi

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

Python

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

0グッド

0クリップ

投稿2017/03/16 02:49

編集2017/03/21 03:02

###前提・実現したいこと
定期的にpythonのプログラムを実行したいです

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

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

###該当のソースコード

python

1 2# Edit this file to introduce tasks to be run by cron. 3# 4# Each task to run has to be defined through a single line 5# indicating with different fields when the task will be run 6# and what command to run for the task 7# 8# To define the time you can provide concrete values for 9# minute (m), hour (h), day of month (dom), month (mon), 10# and day of week (dow) or use '*' in these fields (for 'any').# 11# Notice that tasks will be started based on the cron's system 12# daemon's notion of time and timezones. 13# 14# Output of the crontab jobs (including errors) is sent through 15# email to the user the crontab file belongs to (unless redirected). 16# 17# For example, you can run a backup of all your user accounts 18# at 5 a.m every week with: 19# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ 20# 21# For more information see the manual pages of crontab(5) and cron(8) 22# 23# m h dom mon dow command 24 25 26MAILTO="" 27 28#毎時2分にプログラムを実行する 29*/2 * * * * python /home/pi/tenki.py 30

###試したこと

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

###補足情報(言語/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 を教えて頂き
ログを表示する事が出来ましました

python

1Mar 16 15:10:01 raspberrypi CRON[6690]: (root) MAIL (mailed 548 bytes of output but got status 0x004b from MTA#012) 2Mar 16 15:12:01 raspberrypi CRON[6721]: (root) CMD (python /home/pi/tenki.py) 3Mar 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) 4Mar 16 15:12:01 raspberrypi CRON[6715]: (root) MAIL (mailed 548 bytes of output but got status 0x004b from MTA#012) 5Mar 16 15:14:01 raspberrypi CRON[6747]: (root) CMD (python /home/pi/tenki.py) 6Mar 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) 7Mar 16 15:14:01 raspberrypi CRON[6739]: (root) MAIL (mailed 548 bytes of output but got status 0x004b from MTA#012) 8Mar 16 15:16:01 raspberrypi CRON[6773]: (root) CMD (python /home/pi/tenki.py) 9Mar 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) 10Mar 16 15:16:02 raspberrypi CRON[6766]: (root) MAIL (mailed 548 bytes of output but got status 0x004b from MTA#012) 11 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/21)

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

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

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

参考にしましたサイト↓

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

まず、

起動してくれません

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

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

投稿2017/03/16 03:35

編集2017/03/21 15:29
otn

総合スコア84533

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

techno

2017/03/16 05:56

otnさんお返事して頂いてありがとうございます ご指摘ありがとうございます。勉強になります いろんなサイトを調べているうちに意味も分からず記述してしまったみたいです もともとメールアドレスは設定しないで使用しようと思っていたのです otnさんのご指南の様にすると -bash: /var/log/cron: そのようなファイルやディレクトリはありません と返事が来てしまいます
otn

2017/03/16 06:39

MAILTOに何も設定していないと、crontabに登録作業を行ったユーザ宛にメールが来ます。 > と返事が来てしまいます そういうメールが届いたということですか?それはちょっと考えにくいです。
techno

2017/03/16 06:57

crontabに登録作業時に特にメールの設定をしていないのです メールは届いていません 登録作業時にたしか「設定なし」という項目を選んでしまったような気がします すみません 言葉足らずになってしまいました /var/log/cron と実行すると pi@raspberrypi:~$ /var/log/cron -bash: /var/log/cron: そのようなファイルやディレクトリはありません と表示されます can110さんからの助言により cat /var/log/syslog | grep CRON で ログを表示する事が出来ました メールを設定しない(送信しない)で使うことは可能なのでしょうか?
otn

2017/03/16 08:39

> /var/log/cron と実行すると それは実行するものではありません。 > crontabに登録作業時に特にメールの設定をしていないのです crontab登録作業時にメールの設定をすることはありません。 > 登録作業時にたしか「設定なし」という項目を選んでしまったような気がします なのでこれは勘違いです。OSインストール時の間違いでしょうか? > メールを設定しない(送信しない)で使うことは可能なのでしょうか? OSにメールサーバー(Postfixとか)をインストールしなくてもcrontabは使えます。メールが送られずエラーに気づかないだけです。
otn

2017/03/16 08:39

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

2017/03/17 06:27

otnさんお返事遅くなり申し訳ありません コマンドラインからはちゃんと動いてくれています
otn

2017/03/17 08:13

> コマンドラインからはちゃんと動いてくれています カレントディレクトリがホームディレクトリの状態で動きますか?
techno

2017/03/21 04:24

otnさん こんにちは、お返事遅れてしまって申し訳ありません 天気のプログラムは home/pi/tenki.py     において有りましてhoemからは動かないです これまでの経過を追加しておきましたのでよろしければご覧になって下さい
otn

2017/03/21 05:45

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

2017/03/21 06: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__
otn

2017/03/21 06:16

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

2017/03/21 06:22

otnさん 出来ました!!! このサイト コンソールで叩くと動くスクリプトがCronで動かない時 http://higelog.brassworks.jp/1775 を見ていて 起動させたい時間の記述の所に下記の記述を挿入したらしゃべってくれました PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin こんな初心者に付き合って頂いて本当にありがとうございます 上手く行かなくて申し訳なかったと同時に事細かく助言して頂いてとても嬉しかったです 本当にありがとうございました
techno

2017/03/21 06:25

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

2017/03/21 09:48

> 起動させたい時間の記述の所に下記の記述を挿入したらしゃべってくれました > PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin ということは、純粋なPythonスクリプトじゃなくて、そこから外部コマンドを呼び出していたということだったんですかね。 と、エラーメッセージを見ると、 > proc = subprocess.Popen(shlex.split(text)) Popenがありますね。この起動するコマンドをそもそもフルパスで書いておけばよかったのです。
guest

0

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 02:57

編集2017/03/17 06:54
can110

総合スコア38262

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

techno

2017/03/16 05:50

can110さん前回からご指南ありがとうございます 上記の >標準+エラー出力のログをとってみる。 とあるのですがそのままご提示された物をソースコードに記入で大丈夫でしょうか? >pythonをフルパスで指定してみる。 こちらもソースコードに記述してみましたがダメでした
can110

2017/03/16 06: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ログを確認してもよいです。
techno

2017/03/16 06: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を実行して更にどこかにメールを送っていると言う事でしょうか?
can110

2017/03/16 06:41

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

2017/03/16 07: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 の繰り返しでした
can110

2017/03/16 08:32

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

2017/03/16 08:57

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

2017/03/17 06:30

can110さんお返事遅くなってしまって申し訳ありません これまでの流れを追加しておきました 助言ありがとうございます can110さんから教えて頂いた事を試してみたいと思います 何か進展がありましたらお返事致します
can110

2017/03/17 06:52

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

2017/03/21 03:05

can110さん こんにちは、お世話になっております can110さんのおっしゃる通りハイパーリンク追加しました 細かい配慮ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問