Jessie - lancer un script python comme un service

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Répondre
Avatar du membre
Frollo
Messages : 35
Enregistré le : mer. 2 sept. 2015 22:14

Jessie - lancer un script python comme un service

Message par Frollo » dim. 12 nov. 2017 17:04

J'ai des Pi2 et 3 qui échangent par FTP et SQL des infos et des fichiers grâce à des scripts python.
J'ai suivi l'aide ci dessous pour lancer mes scripts comme des services :
http://www.diegoacuna.me/how-to-run-a-s ... an-jessie/

Puis j'ai fais un magnifique crontab pour programmer tout cela...
Mon service se trouve dans : /lib/systemd/system.... Il s'appelle pymotion.service.

Mon problème est double :
- le script se lance à la racine "/" (je vois le premier fichier se créer, puis il "exit" et ferme).
Je voudrais qu'il se lance au niveau du script : (media/pi/USB/pyde motion/171106 pyde_motion.py"), car il gère des fichiers et tous les liens sont en relatifs.
- si je veux qu'il ne se lance qu'à 6h50 du matin, je suis obligé de l'empêcher de se lancer (au démarrage) ? Du coup, j'ai fait un "@reboot ... systemctl stop", mais je ne trouve pas cela très propre...

Code : Tout sélectionner

[Unit]
Description=PyDemon Motion ALPR
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/python "/media/pi/USB/pyde motion/171106 pyde_motion.py"
RootDirectory="/media/pi/USB/pyde motion"		# this command doesn't work !!!!!!!!!!!!!!!!!!!!?
WorkingDirectory="/media/pi/USB/pyde motion"	# this command doesn't work !!!!!!!!!!!!!!!!!!!!?
Restart=on-abort

[Install]
WantedBy=mutli-user.target
Code: Select all

Code : Tout sélectionner

# crontab to specify when to run the script as a service
@reboot sudo systemctl stop pymotion.service
50 6 * * * sudo systemctl start pymotion.service
45 16 * * * sudo systemctl stop pymotion.service
:roll: :?: Un peu tordu comme besoin, non ? Et pourtant si évident si on gère des fichiers...

maxmed
Messages : 13
Enregistré le : lun. 13 nov. 2017 12:30

Re: Jessie - lancer un script python comme un service

Message par maxmed » lun. 13 nov. 2017 13:53

pour empêcher ton service de démarrer au boot il suffi de le désactiver : sudo systemctl disable application.service
il pourra toujours être lancer au besoin avec sudo systemctl start ...

Jojo
Messages : 25
Enregistré le : ven. 29 sept. 2017 11:49
Localisation : Pays De La Loire

Re: Jessie - lancer un script python comme un service

Message par Jojo » lun. 13 nov. 2017 17:43

Salut,
Frollo a écrit : - le script se lance à la racine "/" (je vois le premier fichier se créer, puis il "exit" et ferme).
Je voudrais qu'il se lance au niveau du script : (media/pi/USB/pyde motion/171106 pyde_motion.py"), car il gère des fichiers et tous les liens sont en relatifs.


Une solution est de modifer ton fichier script de façon à ce qu'il préfixe tous les répertoires par le répertoire courant de ton fichier.

Ca pourrait donner un truc dans ce goût là.

Code : Tout sélectionner

from os import path as os_path
PATH = os_path.abspath(os_path.split(__file__)[0])
Si tu as le chemin du fichier en question :

Code : Tout sélectionner

FILE_PATH='chemin_vers_mon_fichier/fichier'
Alors tu n'as plus qu'à faire quelque chose dans ce genre :

Code : Tout sélectionner

PATH_FILE = PATH + PATH_FILE
(Pas testé en Python mais logiquement ça devrait fonctionner, je le fais en Bash).

A +

Jojo
"Il ne faut jamais remettre au lendemain ce que l'on peut faire le surlendemain." ~ Alphonse Allais

Avatar du membre
Frollo
Messages : 35
Enregistré le : mer. 2 sept. 2015 22:14

Re: Jessie - lancer un script python comme un service

Message par Frollo » sam. 16 déc. 2017 19:38

Cloturé avec une gestion des paht et changement de dossier en début de script... :(

Répondre

Retourner vers « Python »