24-09-2008, 12:05 AM
Alors... pour cron, si tu as un serveur dédié, la meilleure chose a faire est de l'utiliser.
Tu as indiqué que tu l'as, c'est donc bon. Sinon, au passage, la plupart des serveurs dédiés (que je connaissent en tous cas) sont sous debian, donc :
Et tu as ton cron (mais autant que je sache, c'est en théorie intégré à la distribution de base, donc vous ne devriez pas à avoir à faire ça).
Ensuite, rapidement, pour s'en servir, rien de plus simple !
Donc, on commence par lancer crontab (l'utilitaire de gestion des taches) :
Alors, quelques mots sur crontab (pour plus de détails, un man crontab existe). D'abord, il faut citer ses sources : voici les miennes, mais c'est en anglais.
crontab -e sert pour être parfaitement exact à lancer l'éditeur par défaut (souvent vim ou emac) sur le fichier crontab. C'est ce fichier qui va indiquer exactement ce qu'il faut faire, par l'utilisation de lignes de ce type :
m h d M D commande
Vous noterez les espaces.
Le premier "m", en minuscule, indique les minutes. Si il est rempli, la commande ne sera executé que lorsque l'horloge du serveur indiquera que la minute est "m".
Le petit "h" indique les heures. Pareil que pour les minutes, mais avec les heures donc.
Le premier "d", en minuscule, indique les jours. Petite nuance, c'est le numéro du jour dans le mois qui est pris en compte ici : un 13 indiquerais qu'il faut executer le script tous les 13 du mois.
Le second "M", en majuscule, indique le numéro du mois.
Le second "D", en majuscule, indique le numéro du jours, mais du jours de la semaine cette fois. Cela va de dimanche (0) à samedi (6), sachant que vous pouvez utiliser 7 pour le dimanche aussi (donc 0 et 7 conviennent). Donc si vous mettez 4 ici, ce script sera executé le jeudi, par exemple.
Et enfin, la commande est la ligne de commande à executer.
Les espaces servent à délimiter les différents marqueurs. Une * est un joker pour indiquer tous.
Donc, par exemple :
0 0 * * 1 php /var/www/monscript.php
Ceci executera monscript.php tous les lundi à minuit pile
* * 1 * * php /var/www/monautrescript.php
Ceci executera monautrescript.php toutes les minutes du premier de chaque mois
On peut aussi spécifier des intervals et des listes pour les valeures :
0 0 * * 1-5 php /var/www/toto.php
Ceci executera toto.php les cinq premiers jours de la semaine à minuit pile
0 0 * * 1,3,5 php /var/www/toto.php
Ceci executera toto.php le lundi, mercredi et vendredi à minuit pile.
Maintenant, revenons rapidement sur commande : toutes les commandes qui peuvent être passées en ligne de commande normale peuvent être passées ici.
Quelques exemples interessants de commandes :
cp -R /var/www/monsite /var/www/backup
Ceci copie le dossier /var/www/monsite et tous ses sous-repertoires dans le dossier /var/www/backup
mysqldump --all-databases > backup.sql
Ceci sauvegarde la totalité de vos bases mysql dans le fichier backup.sql
A noter que si, comme moi, vous avez du mal avec les commandes shell et ne voulez pas vous embetter à gérer les variables bash, une méthode simple pour ne pas vous retrouver avec un unique backup est de créer une tache cron par jour, et de mettre un nom différent au fichier de backup chaque jour.
Enfin, la fonction interessante : php.
Alors là, on va compliquer un peu, parce qu'il va être important de savoir si, en ligne de commande, vous pouvez ou non lancer la commande php. Pour le vérifier, rien de plus simple : il suffit de taper php /var/www/truc.php dans un terminal. Si il indique que la commande n'est pas trouvée, c'est que ce n'est pas possible.
Alors, si c'est possible, tant mieux. Sinon, il y a deux méthodes : la lente, qui consiste à créer un lien symbolique, et qui n'apporterais que quelques caractères en moins dans votre tache cron - autant dire rien - et la rapide (mais moins élégante, je l'admet) qui consiste à ignorer ce petit inconvénient.
Si vous choisissez la méthode lente, google est votre ami. Sinon, il vous faut déterminer le chemin de votre executable php. Alors, soit vous avez compilé depuis les sources (si si, il y a des masochistes), auquel cas vous savez parfaitement où il est, soit vous avez installé un paquet (ou récupéré une distrib pré-installée), et dans ce cas, il est probablement dans /usr/local/bin/php (vérifiez : tapez dans un terminal /usr/local/bin/php /var/www/test.php).
Sinon, bah... Faut fouiner. Et pour ça, deux manières très simples : un phpinfo() (c'est marqué dessus, c'est comme le port salut), soit un whereis php.
Donc, voila, vous avez votre chemin vers l'executable ? Paaaarfait. Alors maintenant, c'est un jeu d'enfant :
Supposons que le script que vous voulez executer soit /var/www/monscript.php. Il suffit de faire :
Et ca executera le script ! Et donc bien sûr, en mettant les indicateurs de temps vus précédemments, ça l'executera tous les X temps. Je précise aussi, pour les puristes, que :
Redirigera l'affichage du résultat du cron dans /var/www/cron_result.php. Ca peut être utile pour le débogage par exemple (puisque sans ça, vous ne verrez pas les erreurs php).
Et ajoutons :
Qui enlève les en-têtes http de la page générée, ce qui rends la lecture plus claire.
Je précise que bien sûr, /usr/local/bin/php est à remplacer par le chemin vers php (ou par php tout court si votre installation le permet).
Voila voila, mes deux centimes :-)
Tu as indiqué que tu l'as, c'est donc bon. Sinon, au passage, la plupart des serveurs dédiés (que je connaissent en tous cas) sont sous debian, donc :
Code :
apt-get install cron
Et tu as ton cron (mais autant que je sache, c'est en théorie intégré à la distribution de base, donc vous ne devriez pas à avoir à faire ça).
Ensuite, rapidement, pour s'en servir, rien de plus simple !
Donc, on commence par lancer crontab (l'utilitaire de gestion des taches) :
Code :
crontab -e
Alors, quelques mots sur crontab (pour plus de détails, un man crontab existe). D'abord, il faut citer ses sources : voici les miennes, mais c'est en anglais.
crontab -e sert pour être parfaitement exact à lancer l'éditeur par défaut (souvent vim ou emac) sur le fichier crontab. C'est ce fichier qui va indiquer exactement ce qu'il faut faire, par l'utilisation de lignes de ce type :
m h d M D commande
Vous noterez les espaces.
Le premier "m", en minuscule, indique les minutes. Si il est rempli, la commande ne sera executé que lorsque l'horloge du serveur indiquera que la minute est "m".
Le petit "h" indique les heures. Pareil que pour les minutes, mais avec les heures donc.
Le premier "d", en minuscule, indique les jours. Petite nuance, c'est le numéro du jour dans le mois qui est pris en compte ici : un 13 indiquerais qu'il faut executer le script tous les 13 du mois.
Le second "M", en majuscule, indique le numéro du mois.
Le second "D", en majuscule, indique le numéro du jours, mais du jours de la semaine cette fois. Cela va de dimanche (0) à samedi (6), sachant que vous pouvez utiliser 7 pour le dimanche aussi (donc 0 et 7 conviennent). Donc si vous mettez 4 ici, ce script sera executé le jeudi, par exemple.
Et enfin, la commande est la ligne de commande à executer.
Les espaces servent à délimiter les différents marqueurs. Une * est un joker pour indiquer tous.
Donc, par exemple :
0 0 * * 1 php /var/www/monscript.php
Ceci executera monscript.php tous les lundi à minuit pile
* * 1 * * php /var/www/monautrescript.php
Ceci executera monautrescript.php toutes les minutes du premier de chaque mois
On peut aussi spécifier des intervals et des listes pour les valeures :
0 0 * * 1-5 php /var/www/toto.php
Ceci executera toto.php les cinq premiers jours de la semaine à minuit pile
0 0 * * 1,3,5 php /var/www/toto.php
Ceci executera toto.php le lundi, mercredi et vendredi à minuit pile.
Maintenant, revenons rapidement sur commande : toutes les commandes qui peuvent être passées en ligne de commande normale peuvent être passées ici.
Quelques exemples interessants de commandes :
cp -R /var/www/monsite /var/www/backup
Ceci copie le dossier /var/www/monsite et tous ses sous-repertoires dans le dossier /var/www/backup
mysqldump --all-databases > backup.sql
Ceci sauvegarde la totalité de vos bases mysql dans le fichier backup.sql
A noter que si, comme moi, vous avez du mal avec les commandes shell et ne voulez pas vous embetter à gérer les variables bash, une méthode simple pour ne pas vous retrouver avec un unique backup est de créer une tache cron par jour, et de mettre un nom différent au fichier de backup chaque jour.
Enfin, la fonction interessante : php.
Alors là, on va compliquer un peu, parce qu'il va être important de savoir si, en ligne de commande, vous pouvez ou non lancer la commande php. Pour le vérifier, rien de plus simple : il suffit de taper php /var/www/truc.php dans un terminal. Si il indique que la commande n'est pas trouvée, c'est que ce n'est pas possible.
Alors, si c'est possible, tant mieux. Sinon, il y a deux méthodes : la lente, qui consiste à créer un lien symbolique, et qui n'apporterais que quelques caractères en moins dans votre tache cron - autant dire rien - et la rapide (mais moins élégante, je l'admet) qui consiste à ignorer ce petit inconvénient.
Si vous choisissez la méthode lente, google est votre ami. Sinon, il vous faut déterminer le chemin de votre executable php. Alors, soit vous avez compilé depuis les sources (si si, il y a des masochistes), auquel cas vous savez parfaitement où il est, soit vous avez installé un paquet (ou récupéré une distrib pré-installée), et dans ce cas, il est probablement dans /usr/local/bin/php (vérifiez : tapez dans un terminal /usr/local/bin/php /var/www/test.php).
Sinon, bah... Faut fouiner. Et pour ça, deux manières très simples : un phpinfo() (c'est marqué dessus, c'est comme le port salut), soit un whereis php.
Donc, voila, vous avez votre chemin vers l'executable ? Paaaarfait. Alors maintenant, c'est un jeu d'enfant :
Supposons que le script que vous voulez executer soit /var/www/monscript.php. Il suffit de faire :
Code :
/usr/local/bin/php /var/www/monscript.php
Et ca executera le script ! Et donc bien sûr, en mettant les indicateurs de temps vus précédemments, ça l'executera tous les X temps. Je précise aussi, pour les puristes, que :
Code :
/usr/local/bin/php /var/www/monscript.php > /var/www/cron_result.php
Redirigera l'affichage du résultat du cron dans /var/www/cron_result.php. Ca peut être utile pour le débogage par exemple (puisque sans ça, vous ne verrez pas les erreurs php).
Et ajoutons :
Code :
/usr/local/bin/php -q /var/www/monscript.php > /var/www/cron_result.php
Qui enlève les en-têtes http de la page générée, ce qui rends la lecture plus claire.
Je précise que bien sûr, /usr/local/bin/php est à remplacer par le chemin vers php (ou par php tout court si votre installation le permet).
Voila voila, mes deux centimes :-)