Daemon debian et execution script php

dg_dev Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
CptRomaiin Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   58
 
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
0
dg_dev Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
CptRomaiin Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   58
 
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   Statut Membre Dernière intervention  
 
Oui tu as raison, reste que l'aspect séquentiel du cron me pose pb...

Dg_Dev
0
CptRomaiin Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   58
 
C'est à dire ?
0
dg_dev Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
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
0

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

Posez votre question
CptRomaiin Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   58
 
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.
0
dg_dev Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

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

Merci,
Dg_Dev
0
CptRomaiin Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   58
 
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