Daemon debian et execution script php

Fermé
dg_dev Messages postés 20 Date d'inscription lundi 3 août 2009 Statut Membre Dernière intervention 15 octobre 2014 - 13 oct. 2014 à 19:16
CptRomaiin Messages postés 315 Date d'inscription mercredi 23 octobre 2013 Statut Membre Dernière intervention 28 avril 2016 - 15 oct. 2014 à 11:52
Bonjour,

il me faut mettre en place sur une machine debian une détection de l'arrivée d fichiers dans un répertoire pour ensuite déclenche leur traitement avec un script php.

il me semble que de mettre un daemon en place est la solution la plus pertinente pour ne pas alourdir le travail de cette machine mais je ne sais pas par quel bout le prendre ni comment ça marche.

Quelqu'un peut-il m'aider ?

D'avance Merci,
Dg_Dev
A voir également:

6 réponses

CptRomaiin Messages postés 315 Date d'inscription mercredi 23 octobre 2013 Statut Membre Dernière intervention 28 avril 2016 58
14 oct. 2014 à 15:04
Salut,

Moi je mettrais en place une tâche cron qui exécute le script php toute les 10 minutes et qui vérifie lui même si un fichier est disponible.

http://itx-technologies.com/blog/2259-executer-un-script-recurrent-avec-cron-exemples-sous-linux
dg_dev Messages postés 20 Date d'inscription lundi 3 août 2009 Statut Membre Dernière intervention 15 octobre 2014
14 oct. 2014 à 15:31
Bonjour et merci de m'avoir répondu,

J'ai bien envisagé cette solution mais il me faut réagir dès la fin d'écriture du/des fichier(s) arrivant. Du coup passer par le cron, qui au demeurant consomme plus de ressources, n'est pas la bonne solution.

Cordialement,
Dg_Dev
CptRomaiin Messages postés 315 Date d'inscription mercredi 23 octobre 2013 Statut Membre Dernière intervention 28 avril 2016 58
Modifié par CptRomaiin le 14/10/2014 à 15:47
Je ne pense pas que le cron consommera plus de ressources qu'un daemon. Le daemon devra être codé pour vérifier la présence du fichier régulièrement, comme une tâche cron. Par contre la tâche cron ne tourne que toute les x minutes/secondes alors que le daemon occupe la mémoire en permanence. Sachant que pour une tâche cron, si pas de fichier le traitement s'arrête donc ça fait vraiment très peu de ressources utilisées.
0
dg_dev Messages postés 20 Date d'inscription lundi 3 août 2009 Statut Membre Dernière intervention 15 octobre 2014
14 oct. 2014 à 15:47
Oui tu as raison, reste que l'aspect séquentiel du cron me pose pb...

Dg_Dev
CptRomaiin Messages postés 315 Date d'inscription mercredi 23 octobre 2013 Statut Membre Dernière intervention 28 avril 2016 58
14 oct. 2014 à 15:47
C'est à dire ?
0
dg_dev Messages postés 20 Date d'inscription lundi 3 août 2009 Statut Membre Dernière intervention 15 octobre 2014
14 oct. 2014 à 15:51
si je ne m'abuse le cron ne peut descendre en dessous de la minute et je ne maitrise pas ni la taille ni le cadencement de l'arrivée des fichiers
donc faire une vérif toutes les x minutes ne convient pas... il faut vraiment réagir dès le fin d'écriture

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CptRomaiin Messages postés 315 Date d'inscription mercredi 23 octobre 2013 Statut Membre Dernière intervention 28 avril 2016 58
14 oct. 2014 à 16:21
Si tu dois absolument réagir dès que le fichier arrive, tu peux utiliser un script dans ce genre là à lancer au démarrage de la machine (via init.d par exemple) :

#!/bin/bash
while true; do
  nbFichiers=`ls -a /tmp/test/ | sed -e "/\.$/d" | wc -l`
  if [ ! $nbFichiers -eq 0 ] then
    nomFichier=`ls /tmp/test/`
    php script.php $nomFichier
  fi
  sleep 1;
done

exit 0

C'est qu'un exmple, il faudra surement l'améliorer. Note que la récupération du nom du fichier de cette façon ne fonctionne que si un seul fichier est présent.
dg_dev Messages postés 20 Date d'inscription lundi 3 août 2009 Statut Membre Dernière intervention 15 octobre 2014
15 oct. 2014 à 09:13
Bonjour,

merci infiniment pour cet exemple, mais peux-tu me l'expliquer ?

Merci,
Dg_Dev
CptRomaiin Messages postés 315 Date d'inscription mercredi 23 octobre 2013 Statut Membre Dernière intervention 28 avril 2016 58
15 oct. 2014 à 11:52
C'est une boucle infini.

la variable nbFichiers correspond au résultat de la commande
ls -a /tmp/test/ | sed -e "/\.$/d" | wc -l
qui renvoi le nombre de fichiers présents dans le répertoire /tmp/test

La ligne suivante vérifie si le nombre de fichiers est différent de 0. Si c'est le cas on récupère le nom du fichier présent (ne marche que si un seul fichier est présent). Ensuite tu éxécutes ton script php sur ce fichier. A la place de cette ligne tu peux mettre ce que tu veux.

Si le nombre de fichiers n'est pas différent de 0 alors on attend 1 seconde puis on recommence la boucle.

De cette manière, toute les secondes, si un fichier est présent on le traite.

Bien sur ce script est perfectible.
0