cronを使った時に躓いたこと

こんにちは。hacknoteのr.katoです。

先日pythonで書いたコードをcronを使って実行していたのですが、なぜかファイルが存在しないとエラーを返してきて正常に終了してくれませんでした。
色々と調べていたらその原因がわかったので紹介していきます。

起こったこと

次のようなファイルの読み込みをするコードを実行していました。

hoge_error.py
import numpy as np

data = np.loadtxt("./hogehoge.csv",delimiter=",")

このコードを python hoge_error.py といった感じで普通に実行すると問題なく動きます。

しかし、cronを使って実行すると、 No such file or directory といった感じのファイルが存在しないエラーが発生しました。

原因

原因のはファイルのパスを相対パスで指定していたことでした。

cronを使って実行すると、rootやhomeなどでコマンドが実行されます。

そのため、ファイルパスを相対パスで指定していると、ファイルが存在しないor同じ名前の違うファイルにアクセスしてしまう、といったことが発生します。

解決方法

コード内のファイルパスを次のように絶対パスに変更して解決です。

import numpy as np

data = np.loadtxt("/home/hoge/hogehoge.csv",delimiter=",")