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

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

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

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

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

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

解決済

1回答

1779閲覧

ラズパイ4でcronを使った定期処理をしたい

genuine

総合スコア20

cron

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

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

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クリップ

投稿2020/08/08 12:58

前提・実現したいこと

ラズパイ4とcronを使い、サーボモータを操作するpythonファイルを定期的に実行したいです。
crontabで定期的に実行するpythonファイルを設定しましたが、設定した時刻になってもモータが動きませんでした。
原因と対応策をご存じの方がいたら教えていただきたいです。
よろしくお願いします…。

発生している問題・エラーメッセージ

Aug 8 20:52:01 raspberrypi CRON[16345]: (pi) CMD ([16355] '/usr/bin/python3 /home/pi/RaspberryPi/python/SG90-HV_ServoMorot/servo.py')
Aug 8 20:52:01 raspberrypi CRON[16345]: (CRON) error (grandchild #16355 failed with exit status 127)
Aug 8 20:52:01 raspberrypi CRON[16345]: (pi) END ([16355] '/usr/bin/python3 /home/pi/RaspberryPi/python/SG90-HV_ServoMorot/servo.py')

該当のソースコード

python

1import RPi.GPIO as GPIO 2import time 3 4INTERVAL = 1.0 5PIN = 14 6FREQ = 50 7 8GPIO.setmode(GPIO.BCM) 9 10GPIO.setup(PIN, GPIO.OUT) 11servo = GPIO.PWM(PIN, FREQ) 12 13servo.start(0.0) 14 15for i in range(2): 16 servo.ChangeDutyCycle(2.5) 17 time.sleep(INTERVAL) 18 19 servo.ChangeDutyCycle(7.25) 20 time.sleep(INTERVAL) 21 22GPIO.cleanup()

試したこと

色々調べた結果、ラズパイのターミナルでの環境変数とcronで実行する際の環境変数が異なるためにエラーが生じている可能性が高いと考えています。
特にservo.pyの中でインポートしている2つのライブラリ(RPi.GPIO, time)のパスが環境変数として認識されていないことが原因だと考えました。
そこで、ターミナルでターミナルの環境変数を出力するpysys.pyというファイルを実行し、出力されたパスと同じものをcrontabに登録することを試しました。

↓pysys.py
import sys
print(sys.path)

↓crontab -e で設定した内容
LANG=ja_JP.UTF-8
PATH=/home/pi/RaspberryPi/python/SG90-HV_ServoMorot:/usr/lib/python2.7:/usr/lib/python2.7/plat-arm-linux-gnueabihf:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/home/pi/.local/lib/python2.7/site-packages:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/gtk-2.0
*/2 * * * * '/usr/bin/python3 /home/pi/RaspberryPi/python/SG90-HV_ServoMorot/servo.py'

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

環境変数にかんしてはこちらのサイトを参考にしました。
Raspberry Pi Zero WHで作った定点カメラを改良したい②画像に日付を付ける

ただ、自分の場合はなぜかcronの環境変数が出力できなかったので、個別にモジュールをインストールしし直すのではなく、ターミナルと同じ環境変数をまとめて登録するという方法に変えました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

*/2 * * * * '/usr/bin/python3 /home/pi/RaspberryPi/python/SG90-HV_ServoMorot/servo.py'

引用符が余計ですね。何故?

crontab

1LANG=~~ 2PATH=~~ 3*/2 * * * * /usr/bin/python3 /home/pi/RaspberryPi/python/SG90-HV_ServoMorot/servo.py

環境変数を設定するのがそれらだけで十分かどうかは分かりませんが。

投稿2020/08/08 13:08

otn

総合スコア85901

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

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

genuine

2020/08/11 03:37

回答ありがとうございます。 ご指摘通り、引用符を取ることでうまく動かせました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問