シェルでは動くのにジョブスケジューラでは動かないときの注意点【./bash_profile】

レンタルサーバーのジョブスケジューラ―で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('モジュールをダウンロードしたディレクトリのパス')

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です