私は小さな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にあるのか分かりませんでしたので、移動する必要があるかどうかを教えてください(新しい質問を作成する以外に方法がわからない場合でも)
問題はかなり馬鹿げていたので、pip install python-dotenv
とSudo pip install python-dotenv
を実行しました(スクリプトはいくつかのフォルダーにアクセスするにはroot権限が必要です)が、Sudo -H pip install python-dotenv
はしませんでした。
このコマンドを実行した後、cronは正常に実行されます。
cronジョブに使用するすべてのユーザーに対して、pip install your-library
を実行する必要があります。 cronは、ユーザーがジョブを実行する環境を使用するためです。
問題はおそらくこの部分です:
PYTHONPATH=/usr/bin/python3
pYTHONPATHはライブラリの場所を指す必要があるためです。 crontabのその部分を削除するとどうなりますか?