Suite à la mise à niveau d'un ordinateur serveur vers Ubuntu 16.04, tous les programmes python démarrés par cron échouent lors de l'instruction 'import pyodbc'. J'ai installé ce paquet normalement via
pip3 install pyodbc
Si je crée un programme simple contenant uniquement l'instruction 'import pyodbc'
, cela fonctionne si je l'exécute à partir de la ligne de commande:
$ python3 /home/test.py
$
J'ai demandé au même programme d'être exécuté à partir de cron (voici la partie pertinente de crontab):
$ crontab –l
0,5,10,15,20,25,30,35,40,45,50,55 8,10,12-18 * * * python3 /home/test.py 1>>/var/log/python3.log
Ensuite, dans le fichier journal, je reçois:
Traceback (most recent call last):
File "/home/test.py", line 1, in <module>
import pyodbc
ImportError: No module named 'pyodbc'
Le résultat est le même si je lance depuis le cron 'principal' ou depuis une crontab utilisateur '. Que puis-je faire pour résoudre le problème?
OK, grâce à la suggestion de Jacob Vlijm, j'ai finalement trouvé la solution: le paquet 'pyodbc
' avait été installé sous user1 (/home/user1/.local/lib/python3.5/site-packages/
). Lorsque je me suis connecté en tant qu'utilisateur1 de mon terminal, le programme a pu trouver le module. En utilisant cron
, je lance généralement les programmes sous un autre utilisateur (user2
).
C'était le problème. Courir dans cron via utilisateur1, tout était OK. La dernière question que je vais étudier est de savoir pourquoi la commande 'pip3 install pyodbc==3.0.10
' a mis le paquet à la disposition de l'utilisateur1 et non de tous les utilisateurs.
Bon, faites votre programme comme ça
#!/usr/bin/env python3
import pyodbc
Donner des autorisations exécutables comme
chmod +x filename.py
et maintenant ajoutez-le cron et permet de voir.