INCRON : Surveillance de répertoire

Bonjour,

J’ai un petit soucis : Je dois effectuer une action sur les fichiers d’un répertoire précis.
L’action en question est le traitement suivant :

  • un fichier (un PDF) arrive dans le répertoire surveillé
    -> appel de mon script de conversion :
    -> conversion en autant d’images qu’il y a de page (avec convert)
    -> insertion d’un tag sur chaque images
    -> conversion des images en un PDF unique (avec convert)

Pour cela je viens de tester incron qui fonctionne très bien mais apparemment faut pas trop lui en donner à manger car il va trop vite et certains fichiers ne sont pas converti, par exemple avec 5 fichier PDF, 2 seulement sont traités. Le script de conversion en PHP est appelé en console. Celui-ci fait un vingtaines de lignes, rien d’extraordinaire, je pense donc que incron va trop vite et que mon script n’a pas le temps de faire son taf…
Dans la table incron :

j’ai rajouté le caractère & histoire de lancer autant de fois le scripts qu’il y a de fichiers et là tous les fichiers sont converti, certains à moitié, d’autres entièrement. Cette solution reste mauvaise.

Des conseils ? une autre appli qui ferait le même taf que incron ?
Merci

[quote=“sd3574”]…mon script de conversion…[/quote]Transmets nous le contenu de ce ou ces script(s).
Je soupçonne le script d’écraser les fichiers temporaires avant que la conversion précédente soit terminée.

Merci.

Voici le script en question :

[code]$dir_pdf = ‘/www/_tmp/test/tag_pdf/’;
$filename = substr($argv[1], 0, -4);

// Conversion en image
system(’/usr/bin/convert -density 300 ‘.$dir_pdf.‘pdf/’.$argv[1].’ ‘.$dir_pdf.’/etape_1/’.$filename.’.jpg’);

// Ajout tag
$texte = utf8_decode(‘Lot 999 - Item 99999’);
$dir = dir($dir_pdf.’/etape_1’);
$font = $dir_pdf.’/3.ttf’;

header(‘Content-type: image/jpeg’);
putenv(‘GDFONTPATH=’.realpath(’.’));

while ($file = $dir->read())
{
if (substr($file, -4) == ‘.jpg’)
{
$image = imagecreatefromjpeg($dir_pdf.’/etape_1/’.$file);
$bbox = imagettfbbox(30, 0, $font, $texte);
$longt = $bbox[4] + 40;
$noir = imagecolorallocate($image, 0, 0, 0);
$blanc = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image, 4, 4, $longt, 60, $noir);
imagettftext($image, 30, 0, 20, 46, $blanc, $font, $texte);
imagejpeg($image, $dir_pdf.’/etape_2/’.$file, 100);
$i++;
}
}

// Conversion en PDF
system(’/usr/bin/convert -quality 100 ‘.$dir_pdf.’/etape_2/’.$filename.’*.jpg ‘.$dir_pdf.’/etape_3/’.$argv[1]);[/code]

Quand tu parles de fichiers temporaires, tu veux dire que convert génère un fichier temporaire avant de créer l’image finale ?

Je te conseil d’enlever le «&» pour voir si c’est la parallélisation du traitement qui pose problème.
Tes fichiers ont qu’elle convention de nommage ? Car il est bien possible que certain traitement écrase les fichiers en cours de traitement par d’autre comme le dit MicP

Il y a aussi le fait que l’événement déclencheur que tu utilise concerne la création du fichier.
Mais quand cet signal est généré, le fichier (ou répertoire) concerné n’est pas encore complètement écrit et fermé sur le système de fichiers.

Utilise plutôt [mono]IN_CLOSE_WRITE[/mono] que [strike]IN_CREATE[/strike] comme événement déclencheur :

======
Pour le contenu du script, vu l’extension utilisée pour le nom du fichier (convert[mono].sh[/mono]), je m’attendais à du bash ou dash, mais il me semble que c’est plutôt du PHP.
Ceci-dit, c’est un complément d’information qui sera utile si le changement d’événement déclencheur du script ne résout pas le problème.

======
Il faudrait aussi voir si les fonctions utilisées dans ce script ne pourraient pas renvoyer (ou ne renvoie pas déjà) des messages d’erreur dans un ou des fichier “log”.

Mimoza :
J’avais commencé sans le “&” et sinon pour le nommage des fichiers, ceux avec lesquels j’ai testé ont tous un nom différent.

MicP :
Je viens de tester avec “IN_CLOSE_WRITE” et en enlevant le “&” et la ça fonctionne. J’ai testé avec 3 fichiers PDF dont un de 50 pages.
Pour le script, oui c’est bien du PHP avec en première ligne #!/usr/bin/php sinon niveau erreur je les log déjà dans un fichier prévu à cet effet mais là il n’y en avait aucunes…

Au final mon script devra pouvoir gérer une centaine de fichiers PDF, pensez vous que cette solution fera l’affaire ?
Les fichiers PDF en question feront entre 1 et 5 pages maximum.

[quote=“sd3574”]…avec en première ligne #!/usr/bin/php…[/quote]J’ai passé un bon moment a essayer de comprendre cette syntaxe d’assignation des variables dans un script dont le nom d’extension est [mono].sh[/mono] avant de finir par comprendre que le copié-collé était tronqué et qu’il s’agissait d’un script [mono]PHP[/mono].

[quote=“sd3574”]…pensez vous que cette solution fera l’affaire…[/quote]Je n’en sais rien du tout. Je passe la main à ceux qui ont de l’expérience avec [mono]PHP[/mono], [mono]convert[/mono] et les fichiers [mono]PDF[/mono].

Salut sd3574 !
[moderation]Les règles du forum demandent que les titres dans la section SD du forum soient de la forme [mono]DOMAINE : problème[/mono]. Tu peux modifier le titre de ta demande d’aide en éditant le premier message et en en modifiant le titre dans le champ “Sujet”.[/moderation]
Dans ton cas un titre approprié serait [mono]INCRON : Surveillance de répertoire[/mono].

C’est fait