web-dev-qa-db-ja.com

Python cronで起動したときにモジュールが見つかりません

私は小さなubuntuサーバー(バージョン18.04)を実行しています

18.04にアップグレードする前に、cronは正常に実行されていました。

これは私のcrontab(Sudo crontab -e)です。

*/5  *    * * *  PYTHONPATH=/usr/bin/python3 /usr/bin/python3 /home/louis/backup-server/main.py >> /var/log/MYbackup.log 2>&1

ただし、cronが起動すると、次のログが記録されます。

Traceback (most recent call last):
  File "/home/louis/backup-server/main.py", line 7, in <module>
    import config.config as config
  File "/home/louis/python_helpers/config/config.py", line 2, in <module>
    from dotenv import load_dotenv
ModuleNotFoundError: No module named 'dotenv'

ただし、Sudo python3 /home/louis/backup-server/main.pyを実行すると、スクリプトは正しく実行されます

Sudo pip install python-dotenvを実行しました

スクリプトの内容:

# /home/louis/backup-server/main.py
# permissions : -rwxr-xr-x
import os
import requests
import json
import datetime
import sys
sys.path.insert(0, '/home/louis/python_helpers')
import config.config as config
import mail
import utils

def main():
    # some code

if __== "__main__":
    main()

-

# /home/louis/python_helpers/config/config.py
# permissions : -rwxr-xr-x 
import os
from dotenv import load_dotenv
dotenv_path = os.path.join(os.path.dirname(__file__), '.env')
load_dotenv(dotenv_path)
# some config var

__init__.py/home/louis/python_helpers/configファイルがあります。他に追加する情報があるかどうかを教えてください。

一番のバグは、cronではなく手動で起動した場合にスクリプトが正常に実行されることです。

編集:この質問がここにあるのかstackoverflowにあるのか分かりませんでしたので、移動する必要があるかどうかを教えてください(新しい質問を作成する以外に方法がわからない場合でも)

2
L. Faros

問題はかなり馬鹿げていたので、pip install python-dotenvSudo pip install python-dotenvを実行しました(スクリプトはいくつかのフォルダーにアクセスするにはroot権限が必要です)が、Sudo -H pip install python-dotenvはしませんでした。

このコマンドを実行した後、cronは正常に実行されます。

2
L. Faros

cronジョブに使用するすべてのユーザーに対して、pip install your-libraryを実行する必要があります。 cronは、ユーザーがジョブを実行する環境を使用するためです。

0
lemon soft

問題はおそらくこの部分です:

PYTHONPATH=/usr/bin/python3

pYTHONPATHはライブラリの場所を指す必要があるためです。 crontabのその部分を削除するとどうなりますか?

0
Timo Kluck