Page 1 sur 1
Exécuter une tache cron à chaque fin de mois
Posté : 09 mai 2006, 10:40
par pierrecalligaro
Bonjour,
J’ai besoin de faire une tache cron sur WEBMIN que j’exécute à chaque fin de mois.
Ma question est la suivante : si je lui dis d’exécuter le script tous les 31 du mois, va-t-il l’exécuter même si il n’y a que 30 ou 28 jours dans le mois ???
Je pense que la réponse va être négative, mais dans ce cas la comment exécuter une tache cron a chaque fin de mois ?
Merci
Posté : 09 mai 2006, 10:45
par zeus
Et si tu executait simplement ta commande le 1er du mois à 00h00 ?

Posté : 09 mai 2006, 10:52
par pierrecalligaro
oui en effet mais dans ce cas là comment je dois m'y prendre pour ne récupérer que les données du mois précédent ? En fait j'ai besoin de récupérer toutes les factures éditées au cours du mois.
Donc si je mets une tache cron le 1er du mois, je devrair récupérer toutes mes factures du mois précédent.
Posté : 09 mai 2006, 10:54
par zeus
Et alors ? techniquement, ce n'est pas très compliqué, non ?

Posté : 09 mai 2006, 11:01
par pierrecalligaro
heu... avec mon p'tit niveau en PHP, je suis rapidement en surchauffe !!!
Merci quand même je vais essayé de trouver une solution.
A+
Posté : 09 mai 2006, 11:05
par zeus
Quand tu récupères une date, tu la décompose en jour, mois et annee, tu enlève 1 au mois et tu recompose la date

tu as le 1er jour du mois précédent

Posté : 09 mai 2006, 11:41
par pierrecalligaro
Merci Zeus, mais je me demandais si je n'aurais pas un problème en chaque début d'année ? Si je soustrait un mois en janvier il me resortira bien le mois de décembre ?
Posté : 09 mai 2006, 11:44
par zeus
C'est vrai, tu as touché à la joie des dates.
Je ne peut que te conseiller la librairie
PEAR::Date qui gère très bien les navigations dans les date
Posté : 09 mai 2006, 11:48
par iclo
oui, mais bon, suffit de faire un petit test sur le mois, si après décrémentation du mois d'une unité, on obtient zéro, il suffit de mettre douze dans la variable. Meme problème mais si on voulait le mois suivant, si mois vaut 13, on le met à un.
Posté : 09 mai 2006, 11:58
par pierrecalligaro
ok merci pour vos pistes j'essaie tout ça et vous tiens au courant.
Posté : 09 mai 2006, 15:22
par delcedo galaxialord
Sinon enregistrement de la date de la dernière exécution dans une base de données ou un fichier, et cahque début de mois ouverture de ce fichier et récupération de tous les fichiers disponible au delà de cette date
$temps = file_get_contents("derniereMaj.txt");
$f = fopen("derniereMaj.txt","w");
fputs($f, time());
fclose($f);
et ensuite tes traitements avec la date du début du précédent mois dans $temps

Posté : 09 mai 2006, 16:11
par naholyr
Si tu n'es pas l'auteur de l'application dont l'exécution est à planifier, en effet il peut être difficile d'aller la modifier pour qu'elle se comporte comme tu le souhaites.
Le plus simple est de passer par un script shell, chaque jour tu exécutes un script qui en substance va faire :
Code : Tout sélectionner
SI aujourd'hui = dernier jour du mois:
exécuter application
FINSI(on peut varier sur le même theme : chaque mois on exécute un script shell qui calcule le dernier jour du mois et lance une planification unique de l'application sur ce jour là)
Mais pour ça tu dois avoir accès au shell.
Posté : 10 mai 2006, 12:51
par pierrecalligaro
Voici comment j’ai résolu mon problème.
J’ai utilisé une classe de manipulation de Dates, à cette adresse
Ma tache cron est fixée au 1er de chaque mois
Grâce à cette classe je soustrais 1 jour pour récupérer la date du mois précédent et le tour est joué.
Merci à tous
pierre