csid Posted February 15, 2013 Share Posted February 15, 2013 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 More sharing options...
Olivier CLEMENCE Posted February 18, 2013 Share Posted February 18, 2013 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 More sharing options...
csid Posted February 18, 2013 Author Share Posted February 18, 2013 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 More sharing options...
shagshag Posted February 18, 2013 Share Posted February 18, 2013 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 More sharing options...
shagshag Posted February 18, 2013 Share Posted February 18, 2013 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 More sharing options...
csid Posted February 18, 2013 Author Share Posted February 18, 2013 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 More sharing options...
shagshag Posted February 18, 2013 Share Posted February 18, 2013 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 More sharing options...
csid Posted February 18, 2013 Author Share Posted February 18, 2013 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now