Jessie - lancer un script python comme un service

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Avatar de l’utilisateur
Frollo
Messages : 21
Enregistré le : mer. 2 sept. 2015 22:14

Jessie - lancer un script python comme un service

Messagepar Frollo » dim. 12 nov. 2017 18: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 [b]"@reboot ... systemctl stop"
, mais je ne trouve pas cela très propre...
[/b]

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 : 12
Enregistré le : lun. 13 nov. 2017 13:30

Re: Jessie - lancer un script python comme un service

Messagepar maxmed » lun. 13 nov. 2017 14: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 : 24
Enregistré le : ven. 29 sept. 2017 11:49
Localisation : Pays De La Loire

Re: Jessie - lancer un script python comme un service

Messagepar Jojo » lun. 13 nov. 2017 18:43

Salut,

Frollo a écrit :[b]- 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


Retourner vers « Python »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité