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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

2354閲覧

cronに登録して一定時間ごとに動作させたいのですが途中で停止する。

k.horigome

総合スコア12

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

1クリップ

投稿2018/01/17 09:07

編集2018/01/18 08:45
Python2.7X ```解決したいこと 下記のコードをcronに登録して一定時間ごとに動作させたいのですが 初回動作時に、03行目のLEDがONの状態で停止してしまいます。 LED-onはprintしません。 cronの登録内容 0-59/10 * * * * /home/pi/thpva.py 04-05行目を削除しても動作は同じでした。 なお、thpva.pyは sudo python thpva.py で正常に動作しています。 ```コード thpva.py 質問の当初に省略していたコード(前半、01行目-23行目を追記しました。 ---------------------------以下、追記 01 import RPi.GPIO as GPIO 02 import time 03 import commands 04 import datetime 05 import csv 06 import os 07 import bme280_custom 08 09 def GetV(): 10 check = commands.getoutput("i2cget -y 1 0x41 0x02 w") 11 return (int(check[4:6],16)*256+int(check[2:4],16))*1.25/1000 12 13 def GetA(): 14 check = commands.getoutput("i2cget -y 1 0x41 0x04 w") 15 if int(check[4:6],16)<128: 16 return (int(check[4:6],16)*256+int(check[2:4],16)) 17 else: 18 return (int(check[4:6],16)*256+int(check[2:4],16)-256*256) 19 20 21 GPIO.setmode(GPIO.BCM) 22 GPIO.setup(5,GPIO.OUT) 23 -------------------------------以上、追記 24 check = commands.getoutput("i2cset -y 1 0x41 0x05 0x0a 0x00 i") 25 26 GPIO.output(5,GPIO.HIGH) 27 print "LED-on" 28 time.sleep(1) 29 30 dir_path = '/home/pi/ina226-data' 31 32 now = datetime.datetime.now() 33 filename = now.strftime('%Y%m%d') 34 label = now.strftime('%H:%M') 35 csv = bme280_custom.readData() 36 va = str(GetV())+","+str(GetA()) 37 38 if not os.path.exists('/home/pi/ina226-data'): 39 os.makedirs('/home/pi/ina226-data') 40 f = open('/home/pi/ina226-data/'+filename+'.csv','a') 41 f.write("'"+label+"',"+csv+","+va+"\n") 42 43 #with open('/home/pi/ina226-data/'+filename+'.csv','a')as f: 44 # writer=csv.writer(f) 45 # writer.writerow ([GetV(),GetA()]) 46 #f.close() 47 48 GPIO.output(5,GPIO.LOW) 49 print "LED-off" 50 51 52 GPIO.cleanup() 53 exit

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

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

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

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

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

can110

2018/01/17 09:18

09~20行目までをコメントアウトしても22行目で消灯しないでしょうか?(途中で、例外エラーで異常終了していないか?)
k.horigome

2018/01/17 09:33 編集

LEDが点灯しなくなってしまいました。 sudo python thpva.py とすると点滅します。
can110

2018/01/17 09:35 編集

マシンを再起動して再試行してみてください。前回実行時に異常終了などで「GPIO.cleanup()」が呼ばれず、GPIO状態がおかしくなっている可能性があるので。
can110

2018/01/17 09:38

(sudo をつけずに)python thpva.py した結果はどうなりますか?
can110

2018/01/17 09:41

あとひとつ。cronの登録はちゃんと「sudo crontab -e」で行いましたか?参照→http://denshikousaku.net/raspberry-pi-cron-and-python
k.horigome

2018/01/17 10:21

再起動後、sudo python thpva.py および(sudo をつけずに)python thpva.py した結果LEDがON,OFFするようになりました。登録は「sudo crontab -e」で行っています。
k.horigome

2018/01/17 10:29 編集

crondの動作を確認するため「sudo /etc/rc.d/init.d/crond status」を実行したところ、「#/etc/rc.d/init.d/crond: コマンドが見つかりません」と表示されます。sudoをつけても同様です。
k.horigome

2018/01/18 09:01

質問の当初に省略していたコード(前半、01行目-23行目を追記しました。 11行目のint()の引数が不正な書式ということでしょうか?どのように修正すればよいかご教示ください。
can110

2018/01/18 09:07

状況を整理したいのですが、まずはLED点灯→消灯のみの最低限のコードであればcronにて正常に繰り返し動作しますか?
k.horigome

2018/01/18 09:09

はい、正常に動作しています。cronの動作に関しては解決したようです。
can110

2018/01/18 09:12

結論から言えば「i2cgetコマンドはフルパスで指定する(呼び出す)」ようにすればそのエラーについては解決すると思います。
k.horigome

2018/01/18 09:17

10行目 check = commands.getoutput("i2cget -y 1 0x41 0x02 w")の「i2cget」でしょうか?
can110

2018/01/18 09:36

はい。現状ではcheckには意図しない結果(文字列)が入ってきていませんか?
k.horigome

2018/01/18 09:37

10行目、14行目を「"/usr/sbin/i2cget」に修正し「ValueError: invalid literal for int() with base 16: '1:'」は解決しました。
k.horigome

2018/01/18 09:47 編集

その後、Traceback (most recent call last): File "/home/pi/thpva.py", line 40, in <module> f = open('/home/pi/ina226-data/'+filename+'.csv','a') IOError: [Errno 13] Permission denied: '/home/pi/ina226-data/20180118.csv' のエラーが出てしまいました。20180118.csvのPermissionは内容の変更が「所有者のみ」となっていて変更できません。20180118.csvのPermissionは内容の変更が「所有者のみ」となっていて変更できません。 データの生成、書き込み時に何か指定が必要でしょうか?
k.horigome

2018/01/21 07:48 編集

/ina226-dataのパーミッションが、 「drwxrwxr-x」となっていたものを「drwxrwxrwx」と変更した結果、正常に動作できました。 丁寧に説明をいただきありがとうございました
guest

回答1

0

ベストアンサー

以下の記述を追加して、コマンド実行時のエラーを確認して下さい。

bash

10-59/10 * * * * /home/pi/thpva.py >> /tmp/thpva.log 2>&1

追記
スクリプトにshebangも実行許可も無いようなので、以下の記述に変更して下さい。

bash

10-59/10 * * * * /usr/bin/python /home/pi/thpva.py >> /tmp/thpva.log 2>&1

追記2
commands.getoutput()でi2cgetコマンドの実行が失敗しているのが原因です。
int()がエラーメッセージを数値に変換しようとしてエラーになっています。
10行目と14行目のi2cgetコマンドをフルパスで記述して下さい。
cronからコマンドを実行する場合、PATHを含めた環境変数は必要最低限しか設定されていないため、フルパスで記述する必要があります。
i2cgetコマンドのフルパスは以下のコマンドで確認できます。

bash

1$ which i2cget

投稿2018/01/17 10:14

編集2018/01/18 09:40
hichon

総合スコア5737

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

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

k.horigome

2018/01/17 10:49

/bin/sh: 1: /home/pi/thpva.py: Permission denied と記録されています。
hichon

2018/01/17 12:33

追記しました。
k.horigome

2018/01/18 07:12

thpva.logに /bin/sh: 1: usr/bin//home/pi/thpva.py: not found /bin/sh: 1: usr/bin/python: not found と記録されました。
hichon

2018/01/18 07:28

/と空白の位置を確認して下さい。
k.horigome

2018/01/18 07:38

申し訳ありません。一部タイプミスがありました。 thpva.logに記録されたのは /bin/sh: 1: usr/bin/python: not found だけです。
k.horigome

2018/01/18 07:44

何度も申し訳ありません。 /も抜けていました。 修正後 thpva.logに LED-on Traceback (most recent call last): File "/home/pi/thpva.py", line 36, in <module> va = str(GetV())+","+str(GetA()) File "/home/pi/thpva.py", line 11, in GetV return (int(check[4:6],16)*256+int(check[2:4],16))*1.25/1000 ValueError: invalid literal for int() with base 16: '1:' と記録されました。
k.horigome

2018/01/18 09:02

質問の当初に省略していたコード(前半、01行目-23行目を追記しました。 11行目のint()の引数が不正な書式ということでしょうか?どのように修正すればよいかご教示ください。
hichon

2018/01/18 09:41 編集

おそらく、commands.getoutput()でi2cgetコマンドの実行が失敗しているのが原因です。 10行目と14行目のi2cgetコマンドをフルパスで記述して下さい。 フルパスは以下のコマンで確認できます。 $ which i2cget
hichon

2018/01/18 09:41 編集

回答に追記しました。
k.horigome

2018/01/18 09:46 編集

ありがとうございます。10行目、14行目を「"/usr/sbin/i2cget」に修正し「ValueError: invalid literal for int() with base 16: '1:'」は解決しました。が、その後Traceback (most recent call last): File "/home/pi/thpva.py", line 40, in <module> f = open('/home/pi/ina226-data/'+filename+'.csv','a') IOError: [Errno 13] Permission denied: '/home/pi/ina226-data/20180118.csv' のエラーが出てしまいました。20180118.csvのPermissionは内容の変更が「所有者のみ」となっていて変更できません。 データの生成、書き込み時に何か指定が必要でしょうか?
k.horigome

2018/01/21 07:47

/ina226-dataのパーミッションが、 「drwxrwxr-x」となっていたものを「drwxrwxrwx」と変更した結果、正常に動作できました。 丁寧に説明をいただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問