アオカケスの鳥かご

日々の出来事を綴っていきたい

crontabに外部ファイルを参照するプログラムを設定するときの注意点

crontabに正しく設定しているはずなのに想定通りに動作しないことがありました。
解決するまでに無駄に時間を取られたのでまとめておきます。

環境

  • RaspberryPi3 model B

※今回は別にラズパイに限定したことではありません。

やりたかったこと

ラズパイに繋いでいるサーボモータを指定の時間に動かすようにしたかったので、以下のように設定しました。

$ sudo crontab -e
0 0 * * * /usr/bin/python3 /home/pi/new-key/check.py

cronでラズパイのGPIOを使うためにはsudoで設定しなければなりません。
正しく設定したはずですが、サーボモータは動きませんでした。

cronのログを確認してみると、プログラム自体はちゃんと実行されていました。
f:id:aokakes:20190214220345p:plain

解決策

プログラム内で参照しているファイルを絶対パスに書き変えるだけでした。

ちなみに、参照していたファイルは以下の2つ。

感想

crontabに設定するときに絶対パスで指定しないといけないことは当然知っていたのですが、プログラム内で参照するファイルも絶対パスで指定しなければいけないことは盲点でした。

今思えば、cronで実行するときに絶対パスじゃないと動かないのは当然ですよね。
今後はそのあたりも注意して書くことにします。