Jump to content

Nouveau Module : Crontab


shagshag

Recommended Posts

Bonjour,

Juste pour vous présenter un nouveau module disponible sur prestastore : Crontab pour Prestashop

Il permet aux modules de planifier des tâches qui s'exécuteront automatiquement à une certaine heure ou date.

Ce module ne fait rien en soi mais est un outil pour les modules qui ont besoin de faire quelque chose automatiquement à une certaine heure ou date. Il exécute les tâches en utilisant le crontab de Linux, un service Webcron ou le la fréquentation de la boutique.

Pour ceux qu ne connaissent pas crontab : http://fr.wikipedia.org/wiki/Crontab

Petit bout de la doc pour ajouter des tâches






/* Add a cron job

* Module::getInstanceByName('cron')->addCron($this->id, 'myMethod', '5 * * * *');

*

* last parameter details :

* .---------------- minute (0 - 59)

* | .------------- hour (0 - 23)

* | | .---------- day of month (1 - 31)

* | | | .------- month (1 - 12)

* | | | | .---- day of week (0 - 6) (Sunday=0 )

* | | | | |

* * * * * *

*

* remarks :

* It accepts the standard crontab format except steps ('/') : 0-50/5 * * * * isn't valid

*

* exemples :

* - 1 0 * * * : 00:01 of every day of the month, of every day of the week

* - 15 3 * * 1-5 : every weekday morning at 3:15 am

* - 0 0 1,15-17 * * : the first, fifteenth, sixteenth and seventeenth of each month at 00:00

* - 0 0 * * 1 : every Monday at 00:00

*

* Delete a job

* Module::getInstanceByName('cron')->deleteCron($this->id, 'myMethod');

*/

Je pense qu'il peut donner pas mal d'idées aux développeurs de modules.

N'hésiter pas à me faire part de vos remarques :)

 

Link to comment
Share on other sites

  • 4 months later...

Bonjour,

Cela fait quelques jours que je galère avec ce module, j'ai un problème, il me renvoie une erreur :

syntax error, unexpected T_OBJECT_OPERATOR en ligne 20 soit :

Module::getInstanceByName('cron')->runJobs();

Pourriez-vous m'indiquer les modifications à apporter... en vous remerciant par avance.

Link to comment
Share on other sites

Bonjour,

C'est étonnant, ce module fonctionne sur plein de boutiques sans problème.

Vous l'avez bien téléchargé depuis Prestastore ?
Pourriez vous coller le code du fichier en question (cron_traffic.php, cron_webcron.php ou cron_crontab.php)

Link to comment
Share on other sites

Bonjour Shagshag,

Merci de votre réponse. Je vais de ce pas télécharger le module à nouveau depuis Prestatore et je reviens dès demain pour vous donner le résultat. Si l'erreur persiste, je vous fournirai les 3 fichiers en questions.

Link to comment
Share on other sites

  • 2 weeks later...

Tout d abord merci pour ce module bien pratique :)

J'ai un petit soucis, pour le moins bizzare.
Lorsque j'utilise une seul tache le module fonctionne sans probleme.

Par contre lorsqu'il y a plus d'une tache:
les taches sont toute executées simultanement lorsque je clique sur configurer le module au debut. (c'est peut etre necessaire cela dit)
les taches sont toute executées sur le rythme de chaque taches.

Ca fonctionne correctement chez vous avec plusieurs taches?

@+

Link to comment
Share on other sites

Correctif du bug:

Remplacer ligne 918 par

Db::getInstance()->autoExecute(_DB_PREFIX_.'cron', $values, 'UPDATE', 'id_cron='.$cron['id_cron']);



ligne 937 par

Db::getInstance()->autoExecute(_DB_PREFIX_.'cron_url', $values, 'UPDATE', 'id_cron_url='.$cron['id_cron_url']);



Fichier pour le prestastore cijoint

@+

cron.php

Link to comment
Share on other sites

Bonsoir Shagshag,

J'ai vu que vous aviez appelé le fichier, cela a bien fonctionné et les modules correspondants sont activés.
Mon hébergeur (1and1) appelle bien le fichier puisqu'il trouve l'erreur en ligne 20.
Une question me vient à l'esprit.... en mettant la ligne d'appel pour le fichier cron_crontab.php comme indiqué sur le module : php -f ... cela ne fonctionne pas donc j'ai modifié en mettant l'url complète. Dois-je garder php -f ou mettre autre chose ? (je n'ai pas la possibilité de vérifier à l'instant ce que j'ai mis avant l'url complète mais je vous donnerai l'info dans la journée!)

Link to comment
Share on other sites

  • 2 months later...
  • 3 weeks later...
  • 2 weeks later...
  • 5 weeks later...

Bonsoir,

je viens d'installer ce module. Je ne suis pas une experte sur la programmation et jai besoin de savoir quoi faire apres avoir iinstaller CRON sur mes modules. Je ne sais pas comment le configurer pour par exemple les anniversaires, ou bien les sauvegardes. pourriez vous detailer un peu son installation et sa configuration svp... davance merci

Link to comment
Share on other sites

Bonsoir @destockcity,

Pour ajouter une tâche comme pour le cadeau d'anniversaire, il faut indiquer l'URL de la tâche (http://ma.bouti.que/modules/birthdaypresent/cron.php) qui est donnée dans la configuration du module "cadeau d'anniversaire" ainsi que la fréquence d'execution de la tâche (Tous les jours pour ce module)

ça c'est pour les tâches avec URL. Pour celles plus complexes, il faut faire des modules spécifiques comme ça : http://addons.prestashop.com/fr/outils-administration/911-refresh-currencies.html qui met à jour les taux de change automatiquement deux fois par jour. Dans ce cas il suffit d'installer le module qui s'occupe de créer la tâche.

J'espère avoir été clair dans mes explications.
Bonne année

Link to comment
Share on other sites

  • 1 year later...
  • 1 month later...

Bonjour,

 

J'ai téléchargé crontab et je voudrais utiliser la méthode Crontab du serveur.

""Crontab du serveur" est la meilleure méthode, mais uniquement si votre serveur utilise Linux et que vous avez accès à crontab. Dans ce cas, ajoutez la ligne suivante à votre fichier crontab.

* * * * * php -f /web/nom-du-site/.../modules/cron/cron_crontab.php"

 

Cependant, je suis très novice dans la conception de site et je ne comprends pas où ajouter cette ligne. Pouvez-vous m'en dire plus ?

Link to comment
Share on other sites

Bonjour,

 

J'ai téléchargé crontab et je voudrais utiliser la méthode Crontab du serveur.

""Crontab du serveur" est la meilleure méthode, mais uniquement si votre serveur utilise Linux et que vous avez accès à crontab. Dans ce cas, ajoutez la ligne suivante à votre fichier crontab.

* * * * * php -f /web/nom-du-site/.../modules/cron/cron_crontab.php"

 

Cependant, je suis très novice dans la conception de site et je ne comprends pas où ajouter cette ligne. Pouvez-vous m'en dire plus ?

 

bonjour,

 

vous pouvez consulter la documentation de votre hébergeur car cela se fait au niveau de votre hébergement serveur.

Link to comment
Share on other sites

une petite question, j'ai installé cette semaine le module, et j'ai ajouté une url qui va vers un php de backup de ma bdd avec une fréquence de visite tous les jour 12h, mais voilà le backup ne se fait pas. la tache indique bien que la dernière fois effectuée était aujourd'hui à 12h00 mais le fichier bdd sauvegardé présent sur mon ftp est toujours en date d'hier.

 

ais je oublié qqchose?

Link to comment
Share on other sites

merci j'ai utilisé le script fourni par 1and1:

<?php
 // Personnalisez ici vos données d'accès
 $host= 'dbxx.1and1.fr';
 $user= 'dbxxxxxx';
 $pass= 'xxxxxxxx';
 $db=   'dbxxxxxxx';
 // Création de la sauvegarde
 system(sprintf(
   'mysqldump --opt -h%s -u%s -p"%s" %s | gzip > %s/dumpDB.sql.gz',
   $host,
   $user,
   $pass,
   $db,
   getenv('DOCUMENT_ROOT')
 ));
 echo '+DONE';
?>

quand je l'execute manuellement ca fonctionne bien.

l'url est du type www.monsite.fr/monbackup.php avec une frequence de 0 12 * * *

Link to comment
Share on other sites

  • 4 weeks later...

Salut à tous et merci shagshag pour ce module.

 

J'ai installé le module sur ma version 1.4.1 en paramétrant sur "fréquentation de la boutique". J'ai paramétré les tâches pour différents modules comme : anniversaire (tous les jours à minuit), amazon (toutes les heures), google shooping (tous les jours à minuit).

 

Les tâches ont bien étaient exécutées d'après le module, mais en réalité ça n'a pas fonctionné.

 

 

Donc j'imagine qu'il faut prendre la seconde méthode "crontab du serveur".

J'ai mis en capture le planificateur de tâches OVH, mais je dois faire quoi ? excusez mon ignorance..

 

Ps: j'ai un serveur mutualisé OVH

 

 

 

Merci pour votre aide.

Link to comment
Share on other sites

merci j'ai utilisé le script fourni par 1and1:

<?php
 // Personnalisez ici vos données d'accès
 $host= 'dbxx.1and1.fr';
 $user= 'dbxxxxxx';
 $pass= 'xxxxxxxx';
 $db=   'dbxxxxxxx';
 // Création de la sauvegarde
 system(sprintf(
'mysqldump --opt -h%s -u%s -p"%s" %s | gzip > %s/dumpDB.sql.gz',
$host,
$user,
$pass,
$db,
getenv('DOCUMENT_ROOT')
 ));
 echo '+DONE';
?>

quand je l'execute manuellement ca fonctionne bien.

l'url est du type www.monsite.fr/monbackup.php avec une frequence de 0 12 * * *

 

Bonjour,

 

j'arrive un peu tard mais bon.

C'est un peu dur de répondre comme ça :

 

Manuellement c'est en ligne de commande depuis une console ssh ou en ouvrant l'url dans un navigateur ?

 

le module marque la tache comme faite lorsqu'il visite la page, cela ne veut pas dire qu'il l'a trouvé, qu'elle a renvoyé quelque chose ou quoi que ce soit, juste qu'il l'a essayé de la visiter.

Cela peut dépendre du serveur, il ne peut peut-être pas se visiter lui même à cause d'une mauvaise configuration ou d'une sécurité.

 

il faudrait voir si l'url est bien visitée en regardant les logs d'accès ou en modifiant le script pour qu'il laisse une trace.

Link to comment
Share on other sites

Bonjour,

 

Pour les logs d'accès et les paramètres cela dépend de l'hébergeur, il faudrait leur demander.

 

<?php
file_put_contents('log.txt', date('r')."\n"); // <-- ici la trace
 // Personnalisez ici vos données d'accès
 $host= 'dbxx.1and1.fr';
 $user= 'dbxxxxxx';
 $pass= 'xxxxxxxx';
 $db=   'dbxxxxxxx';
 // Création de la sauvegarde
 system(sprintf(
    'mysqldump --opt -h%s -u%s -p"%s" %s | gzip > %s/dumpDB.sql.gz',
    $host,
    $user,
    $pass,
    $db,
    getenv('DOCUMENT_ROOT')
 ));
 echo '+DONE';
?>

 

cela devrait ajouter une ligne dans log.txt à chaque accès au fichier avec la date d'accès.

Link to comment
Share on other sites

  • 1 month later...
  • 2 weeks later...

Bonjour,

 

J'ai installé et activé le module pour les anniversaires.

La boutique est sous OVH et voici l'explication http://guides.ovh.com/MutualiseCron

 

gestion-hebergement-cron2.jpg

 

Par rapport à la ligne, script à exécuter, si je mets

 

 

"Crontab du serveur" est la meilleure méthode, mais uniquement si votre serveur utilise Linux et que vous avez accès à crontab. Dans ce cas, ajoutez la ligne suivante à votre fichier crontab.

* * * * * php -f /homez.429/saracola/www/modules/cron/cron_crontab.php

 

 

j'ai un message d'erreur pour les *****

si j'enlève les étoiles, j'ai un message d'erreur pour les espaces dans la ligne

Quelqu'un pourrait-il m'aider me dire ce qu'il faut mettre exactement.

Link to comment
Share on other sites

Non je n'ai pas posé la question, je pensais que quelqu'un pourrait me répondre ici. Mais je vais passer par eux également. En attendant je passe par un site externe mais si jamais ils deviennent payants, ce serait bien d'avoir l'alternative.

Link to comment
Share on other sites

Bonjour,

 

le * * * * correspond à "tous les jours", "toutes les heures", "Toutes les minutes" ( http://fr.wikipedia.org/wiki/Crontab#Notation )

 

Chez OVH Il faut donc mettre :

  • Script à executer : /www/modules/cron/cron_crontab.php puisque chez OVH on commence au /www/
  • Language PHP 5, puisque Prestashop necessite PHP 5 minimum
  • Description, ce qu'on veux
  • Tous les jours
  • Toutes les heures.

Pour les minutes tant pis, OVH ne gère pas ça.

Link to comment
Share on other sites

Bonjour,

 

le * * * * correspond à "tous les jours", "toutes les heures", "Toutes les minutes" ( http://fr.wikipedia....rontab#Notation )

 

Chez OVH Il faut donc mettre :

  • Script à executer : /www/modules/cron/cron_crontab.php puisque chez OVH on commence au /www/
  • Language PHP 5, puisque Prestashop necessite PHP 5 minimum
  • Description, ce qu'on veux
  • Tous les jours
  • Toutes les heures.

Pour les minutes tant pis, OVH ne gère pas ça.

 

 

Merci pour la réponse car voici la réponse de OVH (d'un pratique :-) )

 

 

Bonjour,

 

Via le Manager OVH, vous pouvez mettre en place cela facilement.

 

Voici des guides vous permettant d'en savoir plus : http://www.ovh.com/fr/hebergement_mutualise/technologie_crontab.xml & http://guides.ovh.com/MutualiseCron

 

Je reste à votre disposition pour toute autre question.

 

Cordialement,

Romuald, Support OVH.

Link to comment
Share on other sites

  • 9 months later...

Bonjour,

 

Le module ne fonctionne chez moi, j'ai cette erreur

 

<b>Parse error</b>: syntax error, unexpected T_OBJECT_OPERATOR in <b>/home/....../www/modules/cron/cron_crontab.php</b> on line <b>20</b><br />

 

Si quelqu'un à une idée, merci.

Link to comment
Share on other sites

Bonjour,

 

Le module ne fonctionne chez moi, j'ai cette erreur

 

<b>Parse error</b>: syntax error, unexpected T_OBJECT_OPERATOR in <b>/home/....../www/modules/cron/cron_crontab.php</b> on line <b>20</b><br />

 

Si quelqu'un à une idée, merci.

 

Bonjour,

 

version du module crontab que vous avez ?

Link to comment
Share on other sites

Bonjour,

 

Le module ne fonctionne chez moi, j'ai cette erreur

 

<b>Parse error</b>: syntax error, unexpected T_OBJECT_OPERATOR in <b>/home/....../www/modules/cron/cron_crontab.php</b> on line <b>20</b><br />

 

Si quelqu'un à une idée, merci.

 

en général ce message indique que le script a été lancé par php4 au lieu de php5.

Link to comment
Share on other sites

Ce n'est pas moi qui est fait la manip mais mon hébergeur.

 

Je leur ai demandé de m'ouvrir un accès SSH et en même temps d'ajouter cette ligne (indiqué par votre module) * * * * * php -f /home/endurobiw/www/modules/cron/cron_crontab.php à mon fichier crontab.

 

J'ai installé aujourd'hui winscp pour l'acceés SSH mais pour l'instant je me documente avant de faire des manip par moi même.

 

Je pense que pour vérifier je dois aller dans winscp dans l'onglet commandes et ouvrir une console puis taper crontab -l

Link to comment
Share on other sites

  • 5 months later...
  • 2 weeks later...

Bonjour à tous,

 

Je réponds à ce topic car je n'arrive pas à avoir le résultat attendu.

 

J'ai créé la tâche cron comme indiqué, j'arrive bien dans le fichier crontab.php, mis le script bloque dans le chargement de la config apparemment.

 

Quelqu'un pourrait il me dire si un die après le chragement de la config fonctionne chez lui ?

 

A priori le souci vient de la ligne :

 

Context::getContext()->shop = Shop::initialize();

 

Merci

Edited by @ide-info (see edit history)
Link to comment
Share on other sites

Après recherche, j'ai isolé le problème, et en comparant à la 1.5.4.1 (j'utilise la 1.5.3), pas de différence notable dans les classes nécessaires.

 

En fait c'est la déclaration de l'id_shop qui pose souci, si je ne déclare pas :

 

$_SERVER['HTTP_HOST'] = 'monDomaine';
$_SERVER['REQUEST_URI'] = 'monUrlDeBase';

 

le script part en erreur, ce qui est normal vu qu'on exécute sur le répertoire et pas en url.

 

Du coup, je ne comprends pas pourquoi ça fonctionne avec le module CRONTAB puisque les appels sont les mêmes.

Link to comment
Share on other sites

  • 9 months later...

Bonjour à tous et merci beaucoup shagshag pour ce module !

Malheureusement je n'ai pas encore eu l'occasion de le voir fonctionner :(

 

Pour infos :

- Je suis sous Prestashop 1.5.4.1,

- J'utilise la version 1.4 du module,

- Je suis chez 1and1,

- J'utilise Putty pour programmer mes crontabs.

 

Avant de paramétrer le module, j'ai fais un test en suivant un tuto ici :

http://blog.vingt-cinq.fr/615-creer-une-tache-cron-de-test-sur-simple-hosting/

 

Cela fonctionne parfaitement avec la combinaison suivante :

* * * * * php /kunden/homepages/16/d14xxxxxx/htdocs/dossier/tests/crontest.php

Content de mon test, j'ai installé le module Crontab pour Prestashop et j'ai activé la fonction de test. Cependant rien ne se passe, il est toujours indiqué "Dernières exécution : jamais"

 

Voici ci-dessous toutes les requêtes que j'ai testé et aucune d'elles ne fonctionnent :

* * * * * php -f /homepages/16/d14xxxxx/htdocs/monsite/modules/cron/cron_crontab.php
* * * * * php /kunden/homepages/16/d14xxxxxx/htdocs/dossier/modules/cron/cron_crontab.php
* * * * * /usr/local/bin/php5 $HOME/monsite/modules/cron/cron_crontab.php
* * * * * wget -q -O /dev/null http://monsite.com/modules/cron/cron_webcron.php
* * * * * php5 -f /homepages/16/d14xxxxx/htdocs/monsite/modules/cron/cron_crontab.php
* * * * * php5 /kunden/homepages/16/d14xxxxxx/htdocs/dossier/modules/cron/cron_crontab.php
* * * * * php -f /kunden/homepages/16/d14xxxxxx/htdocs/dossier/modules/cron/cron_crontab.php

Pour infos, lorsque j’exécute le fichier cron_tabs.php depuis mon navigateur avec l'adresse   , rien ne se passe. Il indique toujours "jamais" dans "Dernières exécutions".
 

Pourriez-vous m'aider svp ? La j'avoue que je sèche complètement... :(

Edited by yvesbj (see edit history)
Link to comment
Share on other sites

Bonjour,

 

effectivement avec le multi-boutique il faut passer par wget et non par php sinon Prestashop ne retrouve pas ses petits puisqu'il identifie les boutiques par leurs URLs.

 

 

 

Excusez moi, mais vous sauriez ce que veut dire ce message lorsque je mets un crontab ? :

no crontab for XXXXXX - using an empty one
crontab: installing new crontab

 

C'est dans le module que ce message apparait ?

Link to comment
Share on other sites

Bonjour Ca fonctionne sur la version 1.5.6 ?

Je cherche à mettre à jour un fichier stock d'un fournisseur en parallèle avec ma boutique.

C'est en fonction d'un fichier CSV. Mise à jour du stock en fonction de la référence produit.

 

 

Melle Claessens

Link to comment
Share on other sites

Bonjour Ca fonctionne sur la version 1.5.6 ?

Je cherche à mettre à jour un fichier stock d'un fournisseur en parallèle avec ma boutique.

C'est en fonction d'un fichier CSV. Mise à jour du stock en fonction de la référence produit.

 

 

Melle Claessens

Bonjour,

 

Oui le module fonctionne sur cette version de Prestashop.

 

Par contre pour faire les maj de stock vous pourriez utiliser : http://www.prestatoolbox.fr/outils-administration/161-synchroniser-les-quantites-des-produits.html

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...