Problème de lancement automatique d'un script Python

Ici vous trouverez comment modifier les fichiers de configuration, mais aussi, pourquoi pas des applis comme apache, vsftp, samba et autres...

Modérateur : Francois

Répondre
tristanbailly83
Messages : 1
Enregistré le : mer. 18 juin 2025 06:36

Problème de lancement automatique d'un script Python

Message par tristanbailly83 » mar. 22 juil. 2025 20:41

Bonjour à tous,

Je me permets de solliciter votre aide pour un problème qui doit certainement en rappeler d'autres. Mon script Python pour gérer l'arrosage automatique fonctionne comme un charme... quand je le lance manuellement. Mais le faire démarrer automatiquement, c'est une autre histoire !

J'ai découvert un excellent fil de discussion sur le forum Raspberry Pi français ( https://forum.raspberry-pi.fr/t/faire-f ... seye/14407 ) qui m'a mis sur la piste. J'ai suivi toutes les étapes avec crontab, mais mon script refuse obstinément de se lancer au boot.

Ce qui me laisse perplexe :

Le script utilise bien le chemin complet (/home/pi/mon_script.py)

J'ai vérifié les permissions (chmod +x)

Pourtant, dans les logs système, je vois toujours ce maudit "Permission denied"

Est-ce que certains d'entre vous ont déjà résolu ce casse-tête ? Je me demande si :

Il manque un délai au démarrage avant l'exécution

Les variables d'environnement diffèrent

Je devrais passer par un service systemd plutôt que cron

Toute piste serait la bienvenue ! Peut-être avez-vous une astuce qui ne figure pas dans les tutos classiques ?

Un grand merci par avance pour vos lumières,

domi
Administrateur
Messages : 3271
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: Problème de lancement automatique d'un script Python

Message par domi » mar. 22 juil. 2025 20:51

Bonjour,

Il faudrait expliquer comment tu lance le script en "manuel", quel user ?

Comment tu le lances en auto, le cron de quel user ?
si c'est du python, il faut mettre le chemin d'accès à python :
exemple

Code : Tout sélectionner

0 0 * * * /usr/bin/python /home/pi/mon_script.py
Donne plus d'info
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.

jelopo
Raspinaute
Messages : 328
Enregistré le : mer. 11 oct. 2017 10:23

Re: Problème de lancement automatique d'un script Python

Message par jelopo » mer. 23 juil. 2025 08:14

Bonjour,

Comme le précise @domi, il est recommandé de placer l'appel au programme python avec son chemin complet devant le script. Vérifiez bien ce chemin si vous êtes par exemple sous pythton3, passez la commande `$ which python3` pour récupérer ce chemin.

De mémoire (je n'en suis pas très sûr), il me semble l'appel à @reboot dans la crontab n'est valable que pour l'utilisateur root pour les Debian et dérivées ? A creuser de ce coté.

De mon coté, pour toute mise en place d'une crontab récalcitrante j'opère pas à pas. Dans un premier temps je lance la cron toutes les minutes avec une commande qui fonctionne à coup sûr.

Code : Tout sélectionner

* * * * * /usr/bin/date >> /tmp/date.txt 2>&1
Puis je modifie un à un mes paramètres pour arriver à ma ligne de commande idéale. C'est un peu rébarbatif, mais terriblement efficace pour pointer le moment entre là où ça fonctionne et plus.

Lorsque vous dites vouloir démarrer automatiquement un script, est-ce au boot uniquement où à heure et dates spécifiques ?

A+

mike913
Raspinaute
Messages : 249
Enregistré le : mar. 7 oct. 2014 09:46
Localisation : Morsang / Orge - Essonne
Contact :

Re: Problème de lancement automatique d'un script Python

Message par mike913 » mer. 23 juil. 2025 15:24

Bonjour

l'appel à @reboot fonctionne pour tous les utilisateurs. Voici un cron qui fonctionne chez moi;

Code : Tout sélectionner

MAILTO=""
@reboot	/home/michel/scripts/bash/Boot
@hourly	/home/michel/scripts/bash/heure
@weekly	/home/michel/scripts/bash/semaine
@daily	/home/michel/scripts/bash/jour
2	0  	*	*	*	/home/michel/scripts/py/tmpstat
15	0	*	*	*	find /var/www/console/graphes/  -type f -mtime +30 -delete
et voici mon fichier batch:

Code : Tout sélectionner

#! /bin/sh
########################################################
LOG="/home/michel/scripts/logs/logs.txt"
sleep 5
UNAME=$(uname -a)
NOW=$(date +"%d/%m/%Y %H:%M:%S")
echo $NOW" | !! Démarrage du système			| "$UNAME >> $LOG
sudo smartctl --info /dev/sda -d sat | grep "Device Model" | awk -F":" '{print $2}'> /var/www/console/data/hdd.txt
/home/michel/scripts/py/getmodel
sleep 10
/home/michel/scripts/py/getreso.py
exit 0
et voici un exemple de script py démmarrant au reboot.

Code : Tout sélectionner

#!/usr/bin/env python3
#-*- coding: utf-8 -*-
# ----------------------------------------------------------------------------
# Information de version		
# ----------------------------------------------------------------------------	
Minor_Version = "1029"
Major_Version = "3"	
Date_version = "29/10/2023"
NomScript = "getmodel"
# ----------------------------------------------------------------------------
# import des modules
# ----------------------------------------------------------------------------
import datetime
import time
import sys
import os
import subprocess
# ----------------------------------------------------------------------------
# procédure config
# ----------------------------------------------------------------------------
def config():
	global CFG
	dossier = os.path.dirname(os.path.abspath(__file__))
	print (sys.version)
	print (dossier)
	if dossier not in sys.path:
		sys.path.append(dossier)
	try:
		import Lib
	except ImportError:
		print ("Erreur: module %s/pylib3.py absent" % (pylib))
		sys.exit(1)
		
	from Lib import pylib3
	CFGFILE = '%s/config/%s.ini' % (dossier,NomScript)
	CFG = pylib3.Get_Config(CFGFILE)
# ----------------------------------------------------------------------------
# procédure log
# ----------------------------------------------------------------------------
def log():
	LOG = CFG.get('Config','log')
	txt = "%s (%s)" % (model,mem)
	print(txt)
	fichier = open(LOG, "w")
	fichier.write(txt)
	os.chmod(LOG, 0o666)
# ----------------------------------------------------------------------------
# procédure get_mem
# ----------------------------------------------------------------------------
def get_mem():
	global mem
	cmd = "cat /proc/cpuinfo | awk '/Revision/ {print $3}'"
	revcode = subprocess.check_output(cmd, shell=True)
	code = int(revcode, 16)
	id = (code >> 20) & 0x7
	mem = CFG.get('Mem',str(id))
# ----------------------------------------------------------------------------
# procédure get_model
# ----------------------------------------------------------------------------
def get_model():
	global model
	cmd = "cat /proc/cpuinfo | grep 'Model'"
	p = subprocess.Popen(cmd,stdout=subprocess.PIPE, shell=True)
	out, error = p.communicate()
	val = str(out,'utf-8')
	model = val.split(':')[1].strip()
#----------------------------------------------------------------------------
# Procédure main
# ----------------------------------------------------------------------------
def main():
	config()
	get_model()
	get_mem()
	log()
# ----------------------------------------------------------------------------
# début du script
# ----------------------------------------------------------------------------
if __name__ == "__main__":
	main()
Il faut que dans les permissions du script, la case exécutable soit coché.

Code : Tout sélectionner

michel@RASPI-40:~/scripts/py $ ls -al getmodel
-rwxr-xr-x 1 michel michel 2716 30 oct.   2023 getmodel
DS712+ 2x Western Digital WD10EADS-00L 1000 GB (SHR) - Firmware: DSM 6.1.6-15266
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox v6
https://meteo.folcke.net
https://wiki.folcke.net

jelopo
Raspinaute
Messages : 328
Enregistré le : mer. 11 oct. 2017 10:23

Re: Problème de lancement automatique d'un script Python

Message par jelopo » jeu. 24 juil. 2025 21:48

Bonjour,
De mémoire (je n'en suis pas très sûr), il me semble l'appel à @reboot dans la crontab n'est valable que pour l'utilisateur root pour les Debian et dérivées ? A creuser de ce coté.
Mea culpa, effectivement ce n'est pas le cas. Désolé.

A+

Répondre

Retourner vers « Les commandes Linux »