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)
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.
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.
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?