crontab et script Python

Bonsoir,

J’ai un script Python qui ne paraît pas démarrer depuis
l’autostart(.config/autostart).

Selon Google cela se fait avec crontab :

J’ai bien la ligne en “@reboot…” ajoutée en fin de fichier (sudo
crontab -e).
La commande “crontab -l” m’indique bien cet ajout.
J’ai ajouté le user “aciah” dans /etc/cron.allow

Mais au redémarrage le script .py n’est pas exécuté.

Qu’est-ce qui m’échappe ?

Il en faudrait un peu plus :slight_smile:

Peux-tu nous afficher la ligne de ton crontab ainsi que le contenu éventuel du fichier exécuté ? (shell ou python directement) ?

Enfin, en général, tu peux essayer avec un script shell tout bête qui log un “Hello world” afin de vérifier qu’une commande est bien exécutée.
Mais surtout ajouter des logs au niveau de ton script python.

Une bonne idée également : exécuter la commande du crontab pour voir si tout se passe comme tu le souhaites !

Bonsoir le Monde libre,

Dans le crontab du user “aciah” j’ai en fin de fichier :
@reboot /usr/bin/python3 /home/aciah/whiskermenu.py >
/home/aciah/log/log.txt 2>&1

Avec un simple print(“Hello world !”) dans le .py , j’ai bien le message
qui est redirigé dans le log.

Mais avec crontab j’ai compris qu’en fait c’est un problème d’import du
module pyxhook car j’obtiens dans log des erreurs qui supputent cela.

Il reste à comprendre pourquoi le module n’est pas chargé.

Merci

Pas fait de crontab depuis longtemps. Mais dans mon souvenir, le problème principal était l’environnement très pauvre dans lequel se lançaient les scripts invoqués par cron. Dans ta shell, tu peux voir ton environnement par la commande “set”: des centaines de variables d’environnement et de fonctions définies, la plupart tu sais pas pourquoi. Mais certaines vitales pour l’exécution de ton script. Je n’ai pas de solution miracle, mais creuse de ce coté:

  • essaies de faire un script cron qui se contente de mémoriser l’environnement courant.
  • essaies de lancer une shell avec cet environnement: il te faudra probablement ajouter des variables pour que le shell tourne.
  • essaies de lancer ton script python depuis cette shell: les erreurs qui ne manqueront pas de péter seront au moins dans un environnement interactif, et s’afficheront à l’écran.
  • tu dois pouvoir ajouter les variables nécessaires pour le lancement cron de ton script.

Bon, plus facile à dire qu’à faire :slight_smile:

Donc on dirait qu’il faut activer un environnement python avec pyxhook installé en début de tache cron ou sinon (fortement déconseillé) installer pyxhook dans le python du systeme, ce qui peut provoquer des effets de bord - incompatibilité avec d’autres taches systeme, difficulté a monter en version, …

en général, on a un environnement virtuel, dans lequel on installe les librairies (genre pyxhook) et ensuite, le cron lance le python de l’environnement virtuel donc ici :

@reboot /home/aciah/venv/bin/python3 /home/aciah/whiskermenu.py >
/home/aciah/log/log.txt 2>&1

Pour faire plusieurs essais, je ne mettrais pas le reboot tout de suite, mais plutôt un lancement chaque minute.

2 « J'aime »