レンタルサーバーのジョブスケジューラ―でPythonのプログラムを動かしてみようと思いよくわからないままSSHでコマンドを打ってたら、シェルではエラー無く実行できるのにジョブスケジューラだと動いてないという状態になって絶望していたことがあったので記事に残そうと思います。
結論を言うと、パスが通っていないだけでした。
参考 【Python】sudo権限のないLinuxサーバーでwebスクレイピング環境構築超兄貴 Life
この記事を参考にさせてもらって、./bash_profile
ってなんだろと思いながらコマンドを打っていたんですが、
どうやらこの./bash_profile
というファイルにexport PYTHONPATH=絶対パス
というのを書いておくと、ログインシェルに入るたびにこれが実行されてパスが通るという仕組みらしいです。
このようなかんじのファイルはいくつかあり、ログインかどうかやインタラクティブかどうかなどで読み込むファイルが変わり、優先度の高い1つのファイルだけを読み込むらしいです。
参考 bash の初期化ファイル .profile, .bashrc, .bash_profile の使い分けと管理方針A Memorandum
そのためジョブスケジューラでは./bash_profile
が実行されないので各ライブラリのファイルをまとめてあるディレクトリにパスが通らず実行できないということでした。
結局、ファイルの最初(他のモジュールをimportする前)に実行したいPythonファイルの中で1行追加してパスを通しました。
import sys
sys.path.append('モジュールをダウンロードしたディレクトリのパス')