Lancer un script périodiquement

Lancer un script périodiquement - PHP - Programmation

Marsh Posté le 21-09-2004 à 12:12:36    

Voilà, je voudrais savoir comment je pourrais faire pour lancer périodiquement un script PHP chargé d'envoyer des mails de relance en fonction du contenu d'une BD. Je souhaiterais une solution indépendante de l'OS (exit donc le CRON sous Linux ou le planificateur sous Win). Je me demandais si Apache n'aurait pas une fonction permettant d'exécuter un script php périodiquement? Merci :jap:

Reply

Marsh Posté le 21-09-2004 à 12:12:36   

Reply

Marsh Posté le 21-09-2004 à 13:08:07    

http://www.webcron.org


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 21-09-2004 à 13:41:55    


 
Vu que c'est pour un intranet, pas question de faire appel à un site sur le web, le serveur n'étant pas raccorder au web...
 
Merci quand même :)


Message édité par rufo le 21-09-2004 à 13:42:13
Reply

Marsh Posté le 21-09-2004 à 15:13:22    

Apache etant un "serveur" il reponds a des "requetes". Donc sans requete apache ne fait rien.
De plus les script php ont une duree limite d'execution. Donc ce n'est pas possible que tu crees toi un script pour ca.
 
Donc non, il n'existe pas de moyen simple de faire ce que tu veux.
Tu dois passer par le systeme de planification des taches de l'os. Soit l'OS du serveur apache. soit ton OS.
Si tu le fais sur ta machine il faudra que tu la laisse allumee, ensuite tu ajoute la tache qui consiste a executer un petit script qui va aller "se connecter" sur le serveur apache pour lancer le script que tu veux.
 
Webcron fait exactement ca. Il se connecte a l'url que tu lui indique au moment que tu as choisi.

Reply

Marsh Posté le 21-09-2004 à 16:01:04    

Cerel a écrit :

Apache etant un "serveur" il reponds a des "requetes". Donc sans requete apache ne fait rien.
De plus les script php ont une duree limite d'execution. Donc ce n'est pas possible que tu crees toi un script pour ca.
 
Donc non, il n'existe pas de moyen simple de faire ce que tu veux.
Tu dois passer par le systeme de planification des taches de l'os. Soit l'OS du serveur apache. soit ton OS.
Si tu le fais sur ta machine il faudra que tu la laisse allumee, ensuite tu ajoute la tache qui consiste a executer un petit script qui va aller "se connecter" sur le serveur apache pour lancer le script que tu veux.
 
Webcron fait exactement ca. Il se connecte a l'url que tu lui indique au moment que tu as choisi.


 
Merci pour tes explications. Donc, je peux pas éviter le crontab :( Y'a un moyen simple d'accéder à une bd mysql par un script? (pas php en l'occurence)

Reply

Marsh Posté le 21-09-2004 à 16:22:26    

bah tu peux faire un dump en bash je pense


Message édité par moxfulder le 21-09-2004 à 16:22:44
Reply

Marsh Posté le 21-09-2004 à 16:32:43    

rappel : je veux pas sauvegarder ma base, je veux envoyer des mails en fonction de certains enregistrements dans une base...

Reply

Marsh Posté le 21-09-2004 à 17:01:07    

Tu as la commande "at" qui existe sur unix et windows .. sur les autres OS je sais pas, mais ça te permet de lancer une commande à une heure précise

Reply

Marsh Posté le 21-09-2004 à 17:05:01    

bha ton apache est sur quoi comme OS? un linux? , tu utilises un deamon At, une tache planifiée qui vas lancer le script php voulu, pas besoin de passer par un service externe.


---------------
Habillé par Canon, Gallerie web v1.0
Reply

Marsh Posté le 21-09-2004 à 17:35:33    

CyberCouf a écrit :

bha ton apache est sur quoi comme OS? un linux? , tu utilises un deamon At, une tache planifiée qui vas lancer le script php voulu, pas besoin de passer par un service externe.


 
sur un Linux mon apache.

Reply

Marsh Posté le 21-09-2004 à 17:35:33   

Reply

Marsh Posté le 21-09-2004 à 21:19:03    

si tu veux executer le script en locale tu n'es pas obligé de passer par apche mais de lancer ton script en mode client et de retourner le resultat dans un fichier de log.
Sinon pour l'executer tu seras obligatoirement obligé de passer par un planificateur, at par exmple.
 
Yannick

Reply

Marsh Posté le 22-09-2004 à 10:59:53    

donc, en utilisant "at", je peux exécuter un script php (perdez pas de vu que ce que je veux au final, c'est envoyer des mails, via php, par rapport au contenu d'un BD MySQL)?

Reply

Marsh Posté le 22-09-2004 à 11:56:28    

rufo a écrit :

donc, en utilisant "at", je peux exécuter un script php (perdez pas de vu que ce que je veux au final, c'est envoyer des mails, via php, par rapport au contenu d'un BD MySQL)?


 
oui
 
tu utilise At pour executer un script php
 
dans ce script tu fe une requtte de selection sur ta bdd mysql et tu envoie le tout par mail avec la fonction mail() par exemple :)

Reply

Marsh Posté le 22-09-2004 à 15:46:54    

lancer un script php via "at", ça ne risque pas de poser de pb? Le pc va comprendre qu'il doit être interprété par apache? ou alors je fais un exec de php.exe auquel je pesse mon fichier php à exécuter en argument...???

Reply

Marsh Posté le 22-09-2004 à 18:26:08    

<Taquine>euh si tu es sur linux tu feras pas un php.exe.C'est koi un exec ?</Taquine>
Sinon le principe c'est ca. PHP va interprete le script passe en parametre et cela sans rien n'interfacer avec apache.
 
Yannick

Reply

Marsh Posté le 22-09-2004 à 23:46:19    

gaby59 a écrit :


Sinon le principe c'est ca. PHP va interprete le script passe en parametre et cela sans rien n'interfacer avec apache.
 
Yannick


 
je confirme !

Reply

Marsh Posté le 27-01-2005 à 18:29:58    

Bon, 2 méthodes :
1) php -q script.php qu'on met dans le cron du serveur
2) wget url_du_script.php qu'on met dans le cron d'un serveur sur lequel on a les droit afin d'exécuter un script php qui se trouve sur un autre serveur sur lequel on a pas les droits pour le cron.

Reply

Marsh Posté le 28-01-2005 à 01:22:56    

Si jamais sur linux, quand tu ecris des scripts, la premiere de ce dernier indique avec quoi il doit etre interprete ...
Donc par exemple un script bash resesmble a ca :

Code :
  1. #/bin/bash
  2. ...


Ben pour ton php, faut que tu metes les path vers php, par exemple :

Code :
  1. #/bin/php4
  2. ...


Attention quand meme, faut que ton php soit bien installe pour ca, en effet il me semble que certaines version de ce dernier n'integrent pas directement l'interpreteur. Donc faut lire un peu la doc de php.

Reply

Marsh Posté le 28-01-2005 à 01:26:24    

cerel > bah /bin/php monscript.php marche aussi bien :)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 28-01-2005 à 12:21:28    

via le cron, j'ai réussi à lancer mon script php en faisant un php -q script.php >/dev/pts/0
la redirection, c'était pour voir le résultat sur la sortie std ;)

Reply

Marsh Posté le 28-01-2005 à 12:23:03    

ah, par contre, pas possible d'accéder aux super variables globales en utilisant cette méthode :( Pourquoi? Genre $_SERVER["DOCUMENT_ROOT"] renvoie une chaîne vide. Pourtant, mon script php est dans le répertoire /www/ (du reste, je ne sais pas si ça a une importance)...

Reply

Marsh Posté le 28-01-2005 à 12:25:21    

ben parce que t'es pas dans l'env de ton serveur apache tiens [:mlc]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 28-01-2005 à 17:38:10    

rufo a écrit :


2) wget url_du_script.php qu'on met dans le cron d'un serveur sur lequel on a les droit afin d'exécuter un script php qui se trouve sur un autre serveur sur lequel on a pas les droits pour le cron.


 
t'es sur que sa marcherait ça ? a mon avis le serveur retournera du simple html.

Reply

Marsh Posté le 29-01-2005 à 09:54:12    

moxfulder a écrit :

t'es sur que sa marcherait ça ? a mon avis le serveur retournera du simple html.


 
j'ai pas testé. Mais un site web disait que ça marchait...

Reply

Marsh Posté le 29-01-2005 à 09:56:14    

the real moins moins a écrit :

ben parce que t'es pas dans l'env de ton serveur apache tiens [:mlc]


 
et y'aurait un moyen d'exécuter mon script php dans l'env d'apache? Apache répond à des requêtes http ; l'idée serait donc de formater une requête htp et de l'envoyer à apache où je lui demande d'exécuter mon script php...

Reply

Marsh Posté le 29-01-2005 à 13:41:50    

... ben tu fais du wget comme dit plus haut.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 29-01-2005 à 13:42:27    

Utilise wget ... :D
Pour information wget fonctionnerait tres bien, ce qu'il fait c'est justement envoyer une "requete" au serveur, donc apres apache recoit la requette lance le script php et retourne le "resultat" (qui d'habitude est une page html).
 
Donc wget fonctionne pour pouvoir lancer un script "a distance" sur une machine ou on a pas access au cron. Et c'est logique d'ailleurs.

Reply

Marsh Posté le 30-01-2005 à 13:54:48    

je vais tester ça demain...

Reply

Marsh Posté le 30-01-2005 à 14:55:21    

Cerel a écrit :

Utilise wget ... :D
Pour information wget fonctionnerait tres bien, ce qu'il fait c'est justement envoyer une "requete" au serveur, donc apres apache recoit la requette lance le script php et retourne le "resultat" (qui d'habitude est une page html).
 
Donc wget fonctionne pour pouvoir lancer un script "a distance" sur une machine ou on a pas access au cron. Et c'est logique d'ailleurs.


 
tien oui, bien évidemment ! J'avais pas vu cela sous cet angle ! Bien vu...
 
mais si le script est derrière un login .htaccess par exemple (si c'est un script qui fait certaines choses sur la machine), c'est possible de lui passer le user/password via wget ?


Message édité par moxfulder le 30-01-2005 à 14:56:16
Reply

Marsh Posté le 30-01-2005 à 15:48:17    

moxfulder a écrit :

tien oui, bien évidemment ! J'avais pas vu cela sous cet angle ! Bien vu...
 
mais si le script est derrière un login .htaccess par exemple (si c'est un script qui fait certaines choses sur la machine), c'est possible de lui passer le user/password via wget ?


 
Je pense pas, a moins de "hacker" wget. Par contre ce que tu peux faire c'est changer ton .htaccess. Si j'ai bien compris tu voudrais utiliser wget pour "appeler" le script qui se trouve sur la meme machine, alors suffit de modifier ton .htaccess pour que le login ne soit pas necessaire si le visiteur proviens de "localhost" ou "127.0.0.1". Regarde la doc d'apache, ca doit etre indique. (Je te conseille de regarder les sections sur le "order deny,allow", puis "allow from localhost" et "require valid-user".

Reply

Marsh Posté le 30-01-2005 à 16:01:59    

ah ben non, le but c'est bien d'appeler le script depuis une autre machine !

Reply

Marsh Posté le 30-01-2005 à 16:57:38    

Etant donne que tu parlais de deux "problemes" j'etais pas sur...
Voila les problemes que j'avais compris :
1) Comment lancer un script php sur une machine distance sans cron. Rep : wget sur une machine avec cron
2) Comment faire pour que le php lance via un cron (sans wget) ai acces aux varibales super globales de php. Rep utilsier wget qui va "passer" par apache.
 
Pour te repondre, si la machine depuis ou tu appelle le script prossede une ip fixe, alors tu peux l'utiliser dans le .htaccess de l'autre machine. Sinon va falloir lire la doc de wget pour savoir si tu peux lui passer des params d'auth.

Reply

Marsh Posté le 30-01-2005 à 18:20:20    

mais si tu lances via cron sur la meme machine, il suffit de lancer php en cmdline non ? $

Reply

Marsh Posté le 30-01-2005 à 19:21:35    

Cerel a écrit :

Je pense pas, a moins de "hacker" wget.


purée mais halte au n'importe quoi, évidemment qu'on peut passer un user/pass à wget...
 
wget --help [:kiki]

Reply

Marsh Posté le 30-01-2005 à 20:27:14    

un user http... mais si on doit s'identifier via une autre page avec un formulaire post ?

Reply

Marsh Posté le 30-01-2005 à 20:43:44    

Reply

Marsh Posté le 31-01-2005 à 08:55:20    

moxfulder a écrit :

mais si tu lances via cron sur la meme machine, il suffit de lancer php en cmdline non ? $


 
Oui bien sur, mais rufo se posait la question du pourquoi il ne pouvait pas acceder aux variables super globales. En utilisant wget on "passe" par apache, donc on peux y  acceder.
 

the real moins moins a écrit :

purée mais halte au n'importe quoi, évidemment qu'on peut passer un user/pass à wget...
 
wget --help [:kiki]


 :cry:  
Oui mais c'est moins fun  :kaola:  
 
Bon, bon, promis j'arrete de "hacker" les progs sans defense et j'utilise les fonctions deja presentes.  :sol:

Reply

Marsh Posté le 31-01-2005 à 09:53:08    

moxfulder a écrit :

ah ben non, le but c'est bien d'appeler le script depuis une autre machine !


 
non, non, c'est depuis la même machine.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed