web-dev-qa-db-fra.com

Module Python introuvable lors du lancement dans cron

J'utilise un petit serveur Ubuntu (version 18.04)

Avant de passer à 18.04, le cron fonctionnait parfaitement.

Voici ma crontab (Sudo crontab -e):

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

Mais lorsque le démarrage de cron commence, les informations suivantes sont enregistrées:

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'

cependant si je lance Sudo python3 /home/louis/backup-server/main.py le script est correctement exécuté

J'ai couru Sudo pip install python-dotenv

Contenu des scripts:

# /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

J'ai un fichier __init__.py dans /home/louis/python_helpers/config, faites-moi savoir si, pour toute autre information, je devrais ajouter.

Ce qui me gène le plus, c’est que les scripts s’exécutent correctement s’ils sont lancés manuellement, mais pas comme cron.

Edit: Je ne savais pas si cette question appartenait ici ou sur stackoverflow, alors dites-moi si je devrais la déplacer (même si je ne sais pas comment créer une nouvelle question)

2
L. Faros

Eh bien, le problème était assez stupide, j’ai exécuté pip install python-dotenv et Sudo pip install python-dotenv (le script nécessite l’autorisation root pour accéder à un dossier) mais je n’ai pas procédé à Sudo -H pip install python-dotenv.

Après avoir exécuté cette commande, le cron s’exécute parfaitement.

2
L. Faros

pour chaque utilisateur que vous utilisez pour les tâches cron, vous devez utiliser pip install your-library. Parce que cron utilise l'environnement dans lequel l'utilisateur exécute le travail.

0
lemon soft

La question est probablement cette partie:

PYTHONPATH=/usr/bin/python3

parce que PYTHONPATH devrait indiquer où sont vos bibliothèques. Que se passe-t-il si vous supprimez cette partie de la crontab?

0
Timo Kluck