Page 1 sur 1

wget & at

Posté : 07 déc. 2006, 21:48
par Mickey01
Je voudrais pouvoir planifié l'execution d'un script php (avec la methdoe wget) en utilisant la commande 'at' mais visiblement je n'y arrive pas.

Alors est possible ?? Si oui quelle est la bonne syntaxe ??

De plus, je dois pouvoir passer des paramêtres au script php apellé.

Voici ce que j'ai deja essaié mais sans succes.

Code : Tout sélectionner

exec("at wget 'http://domain.tld/script.php?a=1&b=2 22:08 07.12.2006'")

Posté : 07 déc. 2006, 22:28
par Ripat
Mets ta commande wget 'xxxxxxxxxxxxx' dans un fichier (pour l'exemple monAt)

Lance ton at comme ceci:

Code : Tout sélectionner

at -f /chemin/vers/monAt 21:24 2006-12-7

Posté : 08 déc. 2006, 10:14
par Mickey01
En passant par un fichier intermediaire ca fonctionne mais dans ce cas je ne peux pas passer de paramêtres à mon fichier php.


Car ce fichier php qui doit être lançé, execute une requête de selection sur un identifiant recuperé par la methode GET.

Alors comment passer mes variables à ce fichier php ??

Mickey01

Re: wget & at

Posté : 08 déc. 2006, 10:33
par naholyr

Code : Tout sélectionner

exec("at wget 'http://domain.tld/script.php?a=1&b=2 22:08 07.12.2006'")
Les single-quotes ne sont pas au bon endroit, c'est la commande "wget ..." que tu dois entourer, pas la commande + la date ;)

Pas bon
exec("at wget 'http://domain.tld/script.php?a=1&b=2 22:08 07.12.2006'")
Bon
exec("at wget 'http://domain.tld/script.php?a=1&b=2' 22:08 07.12.2006")
Le problème vient du '&' qui indique la fin de la commande et le fait qu'elle doive s'exécuter en arrière plan (typiquement utiliser pour lancer des applications graphiques en ligne de commande). En entourant la commande de single-quotes tu es normalement tranquille.

Posté : 08 déc. 2006, 10:56
par Mickey01
Avec cette commande :

Code : Tout sélectionner

exec("at wget 'http://domain.tld/script.php?a=1&b=2' 22:08 07.12.2006")
voici l'erreur en retour :

Code : Tout sélectionner

bash: syntax error near unexpected token `07.12.2006")'

Donc toujours pas bon. :cry:

Posté : 09 déc. 2006, 09:50
par Ripat
En passant par un fichier intermediaire ca fonctionne mais dans ce cas je ne peux pas passer de paramêtres à mon fichier php.

Car ce fichier php qui doit être lançé, execute une requête de selection sur un identifiant recuperé par la methode GET.
Je ne pense pas que tu puisses lancer ta commande vers at comme ça. Soit tu la mets dans un fichier comme indiqué plus haut, soit:

Code : Tout sélectionner

at 21:24 2006-12-7 < /chemin/vers/tonFichierDeCommande
Si tu ne veux pas travailler avec des fichiers intermédiaires, la solution est de "piper" la commande dans at.

Code : Tout sélectionner

echo "wget 'http://ton-site/page.php'" | at 08:20 2006-12-06'
Mais, comme l'a fait remarquer Naholyr, attention de bien protéger ton url pour éviter l'interprétation du & par le shell.

Enfin, à chaque fois que tu invoques wget, il va, par défaut, écrire le resultat de la page dans un fichier qui portera le nom de la page. Si ton script tourne souvent, tu vas te retrouver avec de nombreux fichiers inutiles. Utilise l'option -O- (-O Output vers - rien)

Donc, au final, dans PHP ça devrait donner:
exec ('echo "wget -O- \'http://domain.tld/script.php?a=1&b=2\'" | at 08:20 2006-12-06');

// ou bien

exec ("$(wget -O- 'http://domain.tld/script.php?a=1&b=2') | at 08:20 2006-12-06");

Posté : 22 déc. 2006, 16:06
par Mickey01
Merci Ripat ça fonctionne avec cette syntaxe.

Moi qui pensais simplement remplacer certaines valeurs par des variables et la ca ne fonctionne plus.

Je me suis aperçu que l'url est tronquée.

Pour l'instruction suivante :
<?php
$a = 123;
exec ('echo "wget -O- \'http://domain.tld/script.php?a=$a&b=2\'" | at 08:20 2006-12-06');
?>

Dans le spool, je retrouve cette url :

Code : Tout sélectionner

http://domain.tld/script.php?a=
si je place un caractere d'echapement ce n'est pas bon

je me retrouve avec

Code : Tout sélectionner

http://domain.tld/script.php?a=$a&b=2
Alors quelle est la bonne syntaxe pour integrer une variable ??

Romeo

Posté : 22 déc. 2006, 17:08
par Mickey01
J'ai trouvé la solution

J'en ai profifité pour décomposer l'instruction.
$a = 123;
$url = "'http://domain.tld/script.php?a=$a&b=2";
exec ("echo \"wget -O- '$url' \" | at 08:20 2006-12-06"); 
Merci encore Ripat

Posté : 22 déc. 2006, 17:21
par zeus
l'erreur venait en fait que quand la chaine est entourée par des ', aucune variable n'est interprétée, contrairement aux "
$a = "toto";
echo "bonjour $a ;-)"; //affiche "bonjour toto ;-)"
echo 'bonjour $a ;-)'; // affiche "bonjour $a ;-)"
Pour éviter ce genre d'erreur, il est recommandé de toujours extraire les variables des chaines
$a = "toto";
echo "bonjour ".$a." ;-)"; //affiche "bonjour toto ;-)"
echo 'bonjour '.$a.' ;-)'; // affiche "bonjour toto ;-)"