Jump to content

Pb Avec Require Configdans Tâche Cron


csid

Recommended Posts

Bonjour,

 

j'ai développé des scripts php qui me permettent de mettre à jour ma base produit selon mes souhaits.

- Ces scripts sont placés dans le répertoire /admin/crontab (créé par mes soins)

- Ces scripts fonctionnent tous si ils sont lancés dans un navigateur.

 

Je pensais donc qu'ils fonctionneraient une fois installé en tâches cron mais ce n'est pas le cas.

 

Recherche faite le pb vient d'une ligne require que je mets en debut de script pour pouvoir bénéficier des classe et méthodes de PS :

//----- include pour utiliser les classes prestashop
require('/home/xxxxx/www/config/config.inc.php');
require('/home/xxxxx/www/init.php');

 

Lorsque mes tâches CRON sont lancées elles plantent. En fait tout se passe comme si le script comportait des erreurs et n'etait pas exécuté du tout.

 

Evidemment j'ai besoin des fonctionnalités déjà developpées dans PS (gestion d'images, options, indexation etc...)

 

Une idée sur comment contourner le pb ou même la raison du problème????

 

Je sèche!

Link to comment
Share on other sites

Je me trompe peut-être mais il est pas impossible que l'accès au dossier "admin" soit sécurisé via htaccess pour que seul un humain (donc navigateur) puisse y accéder.

 

Sinon, il faut regarder dans les fichier appelés avec require s'il n'y a pas une référence à "cookie", ou autre variables utilisateurs qui n'existent évidemment pas lorsque le script est appelé en cron !

Link to comment
Share on other sites

Merci pour ces infos qui sont certainement très pertinentes.;)

 

Voici la solutions que j'ai trouvé pour contourner le pb :

dans mon repertoire admin/crontab j'ai mis toutes mes tâches cron

genre recup_blablabla.php

pour chaque tâche j'ai créé un autre script nommé lance_recup_blablabla.php qui utilise CURL pour pointer sur la véritable tache cron.

la tâche qui lance :

#!/usr/bin/php5 -q
<?
//----------------------------------------------------
//---- lanceur recupération
// création d'une nouvelle ressource CURL
$ch = curl_init();
// configuration de l'URL et d'autres options
curl_setopt($ch, CURLOPT_URL, "http://www.monsite.fr/admin/crontab/recup_blablabla.php");
curl_setopt($ch, CURLOPT_HEADER, 0);
// récupération de l'URL et affichage sur le "naviguateur"
curl_exec($ch);
// fermeture de la session curl
curl_close($ch);
?>

 

ca marche!

Link to comment
Share on other sites

Bonjour,

 

en ligne de commande c'est bien php5 qui est exécuté ? sur certains serveurs /usr/bin/php est en fait php4 et il faut utiliser /usr/bin/php5. Prestashop bug avec php 4.

 

Une solution crade mais qui marche toujours est de faire un wget plutôt qu'un appel direct de php mais attention au timeout.

Link to comment
Share on other sites

pour chaque tâche j'ai créé un autre script nommé lance_recup_blablabla.php qui utilise CURL pour pointer sur la véritable tache cron.

 

lancer php pour lancer curl qui lance apache qui lance php pour executer la tâche ça fait beaucoup :)

autant lancer curl directement dans la tâche cron dans ce cas. mais encore attention aux tâches longues qui risquent de s'arrêter avant la fin.

Link to comment
Share on other sites

Certes!

les tâches sont longues pour certaines.

J'ai evidemment mis le timeout à 0.

 

Pour lancer curl directement, oui c'est certainement mieux mais là... je manque de pointu coté système donc j'ai utilisé les outils que je maitrise(si peu)

 

Et comment j'aurai dû lancer cette tâche sachant que je gère mes taches cron dans un webmin?

Link to comment
Share on other sites

Je ne connais pas webmin mais si j'en crois cette photo d'écran http://i.stack.imgur.com/hYKFC.jpg on indique directement la commande.

 

La commande pour lancer du php5 sera

/usr/bin/php5 -f /home/xxx/public_html/admin/crontab/recup_blablabla.php

en considérant que ce que j'ai dit plus haut sur le /usr/bin/php et php4 est vrai

 

sinon pour lancer la tache comme dans un navigateur

wget "http://www.monsite.fr/admin/crontab/recup_blablabla.php"

devrait fonctionner

Link to comment
Share on other sites

j'aindique directement :

/home/xxx/public_html/admin/crontab/recup_blablabla.php

puisque dans le debut de mon script je stipule : #!/usr/bin/php5 -q

 

C'est donc bien php5 qui traite.(je ne connais pas l'utilité du -q)

 

Mais l'idée du wget est tentante!

 

Merci pour toutes ces précisions.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...