Problème avec les taches crons

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème avec les taches crons

par Ripat » 13 avr. 2008, 13:50

:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
:wink:

par Invité » 13 avr. 2008, 13:11

Merci pour le tutorial, c'est bien pratique !

Par contre :
- pour sortir du mode édition de VIM faut faire 'Echap'
- pour enregistrer faut tapper ':w'
- pour quitter faut tapper ':q'

a+

par xtrem » 29 août 2006, 12:59

Salut,

Moi aussi je suis chez 1and1.fr.
Je cherche à executer mon script php depuis une commande cron mais j'y arrive vraiment pas.

En fait, j'ai installé un module de backup de bbd qui prend en charge le cron.
Je voudrais l'automatiser via une commande cron de façon à ce que ce script s'execute une fois par semaine.

Esc-ce que quelqu'un peut m'aider parceque là je galère vraiment ?

Mon script est paramétré, il suffit juste de lui indiquer la commande en cron.

Merci :lol:

par X_a_v_i_e_r » 24 juil. 2006, 01:00

Bonsoir,

Alors, je viens de réussir, grace à vous, à faire tourner mon premier cron ! Je vais mettre tous les détails ici, pour que les personnes qui auront le même soucis que moi sachent se repérer ;)

Ce qui suit va présenter la construction d'une tâche cron, c'est-à-dire d'une tâche automatisée, mais ici seulement pour un code en PHP. Toutes les informations suivantes ne seront pas forcément les meilleures méthodes, mais elles marchent ^^

Le nécessaire pour faire des taches crons :
- un serveur dédié sous Linux
- les informations pour vous connecter en SSH (vous devez les avoir dans les informations sur votre compte).

Pour information, j'utilise le logiciel putty, téléchargeable ici.

Première étape :
Création d'un fichier PHP, auquel vous pouvez donner le nom de cron.php, pour vous le repérer facilement.

Construction du fichier cron.php :

Code : Tout sélectionner

<?php $connexion = mysql_connect('localhost','*********','*******') or die("Connexion:". mysql_error());; mysql_select_db('********'); // Ensuite, un update banal sur une table test, du style : mysql_query("UPDATE test SET valeur='100'"); // attention à ne pas mettre ce signe ` il est proscrit mysql_close($connexion); // on referme la connexion ?>
Voici donc le fichier qui sera exécuté. En cas de tests prolongés, il suffit de sélectionner une valeur dans la table et de l'incrémenter à chaque fois.

Deuxième étape :
Maintenant, il faut rechercher à quel endroit se cache l'exécutable PHP. Pour cela, il faut ouvrir le logiciel de connexion SSH, se connecter avec le compte et mot de passe, et taper :

Code : Tout sélectionner

which php // Merci Ripat ;)
Vous avez désormais le chemin d'accès à votre exécutable php, qui va en quelque sorte indiquer avec quoi exécuter votre code (le fichier cron.php).
Rendez maintenant votre fichier "exécutable", en attribuant le droit au fichier d'être exécuté. Pour cela, tapez :

Code : Tout sélectionner

chmod +x /cheminverslefichier/cron.php
Maintenant, il ne reste plus qu'à créer la tache cron, prochaine étape.

Troisième étape :
Maintenant, il vous faut écrire votre tâche cron. C'est simple comme bonjour quand on sait comment faire ^^'

Lorsque vous êtes connectés en SSH, il faut taper la commande suivante pour se rendre dans l'éditeur (en l'occurence, Vim) de tâches crons :

Code : Tout sélectionner

crontab -e
Hé bien, il ne reste plus qu'à créer les tâches crons. Un petit rappel sur la contruction d'une tache cron :

* * * * * /chemindaccesverslexecutable /chemindaccesverslefichier/cron.php
--> il faut savoir que le chemin d'accès vers le fichier ici est depuis la racine, je ne sais comment la trouver autrement que par la commande dir ../

Les étoiles représentent la périodicité, sous la forme :
Minute Heure Jour Mois Jourdelasemaine
--> Ici pour plus de détails sur la périodicité

Au départ, durant les tests, vous allez mettre une tache toutes les deux minutes, vous n'aurez qu'à aller consulter votre base de donnée pour constater les changements, ou encore faire un echo du résultat (et à ce moment là, rajouter avant la tache cron la ligne : MAILTO=votreadresse@********.**)

Dans Vim, pour passez en mode édition, appuyez sur la touche "i".

Voici donc la commande en question :

Code : Tout sélectionner

HOME=/ // ecrit une seule fois, La variable HOME peut être utilisée pour le paramétrage du répertoire à utiliser pour l'exécution de commandes ou de scripts */2 * * * * /chemindaccesverslexecutable /chemindaccesverslefichier/cron.php // vous avez normalement trouvé le chemin vers l'éxécutable plus haut, souvent /usr/local/bin/php
Et voila, votre tache cron est prête. Il vous faut enregistrer les modifications avant de quitter. Il vous faut sortir du mode édition. Pour ma part, j'ai constaté que CTRL + C quittait le mode d'édition. On peut donc enregistrer en tapant : Puis quitter Vim en tapant : Et enfin, fermer la connexion en tapant tout simplement :

Code : Tout sélectionner

exit
Allez constater sur la base de donnée l'effet de cette tache CRON. Lorsqu'elle marche, n'oubliez pas de diminuer la périodicité ;) et vous pouvez rajouter autant de lignes que vous le désirez, pour rajouter l'éxécution d'autres fichiers.

Voila, j'espère avoir aidé, et j'espère également ne pas avoir fait trop de fautes ;)

Bonne soirée

par Ripat » 23 juil. 2006, 09:40

La, j'obtiens un access denied quand il tente d'ouvrir le fichier qui contient le code php (rendu exécutable pourtant par chmod), alors que j'utilise le compte et mot de passe qui m'est fourni par celui qui héberge mon serveur dédié (1&1).

Que faut-il taper comme commande pour connaître les droits dont dispose l'utilisateur courant ?
Si tu utilises ton script php en CLI, il ne doit pas être obligatoirement exécutable. zigz4g t'a donné le bon conseil. Vérifie le chemin de php CLI avec which ou whereis et ajoute les dans ta ligne cron.

En ce qui concerne les droits, ils ne sont pas attachés à un utilisateur (sauf root qui peut tout faire), mais bien aux fichiers. Pour afficher les droits d'un fichier:

Code : Tout sélectionner

ls -l /chemin/fichier
Deux solutions alternatives à php CLI:
  • utiliser curl ou wget pour exécuter ton script php (à condition d'avoir un sevreur http sur ta machine, bien sûr):

    Code : Tout sélectionner

    # avec wget (avec options timeout et retry) 15 9,16 * * * /usr/bin/wget --timeout=5 --tries=1 -q -O - 'http://localhost/script.php' # avec curl 15 9,16 * * * /usr/bin/curl --max-time 5 --retry 1 'http://localhost/script.php'
  • faire un script linux "auto-exécutable" avec un shabang:

    Code : Tout sélectionner

    #! /usr/local/bin/php <?php // Attention, après le shabang, tu dois spécifier le chemin complet. // et, dans ce cas-ci, rendre ce script exécutable (chmod +x nom.du.script) echo "Hello world, it is ".date('H:i:s')."\n"; ?>

par X_a_v_i_e_r » 20 juil. 2006, 23:04

Bonsoir,

Cela, je l'ai défini, mais pas directement dans la tache cron, plutot avant, car il ne comprend pas quand je lui mets le chemin d'accès de l'exécutable php.

La, j'obtiens un access denied quand il tente d'ouvrir le fichier qui contient le code php (rendu exécutable pourtant par chmod), alors que j'utilise le compte et mot de passe qui m'est fourni par celui qui héberge mon serveur dédié (1&1).

Que faut-il taper comme commande pour connaître les droits dont dispose l'utilisateur courant ?

Bonne soirée

par zigz4g » 15 juil. 2006, 12:44

Salut

Généralement pour utiliser cron, il faut lui configurer l'environnement pour lui permettre de trouver les executables.
Dans ton cas, essayer de lui passer la commande dans ce style :

Code : Tout sélectionner

*/5 * * * * /usr/local/php/bin/php /var/www/html/index.php
C'est a configurer en conséquence de la distribution que tu utilise bien sur.
Tu peux faire un "locate php" ou "which php" pour trouver l'executable.

par X_a_v_i_e_r » 08 juil. 2006, 13:50

Ah, excuse-moi, je pensais avoir posté dans gestion de serveur.

Et aussi, une autre question : que donne le PHP exécuté en CLI ?

Bonne journée

par Cyrano » 08 juil. 2006, 12:56

Ça, c'est pas du PHP : sujet déplacé. [-X

Problème avec les taches crons

par X_a_v_i_e_r » 08 juil. 2006, 12:51

Bonjour,

J'ai actuellement un problème dans le paramétrage de mes taches crons (je suis sur un serveur dédié, fourni par 1&1). J'utilise Putty pour me connecter, puis la commande crontab -e, et dans Vim, j'édite une nouvelle tache cron.

Je définis la périodicité :
*/5 * * * *
Puis je tape la commande pour ouvrir un fichier (en l'occurence php). Le problème, c'est que quelque soit le chemin que je tape, je tombe sur fichier non trouvé (MAILTO au début de la crontab m'envoie le rapport sur ma boîte mail).

J'ai beau vérifier le chemin d'accès avec la commande dir, je retrouve bien le fichier au chemin d'accès que je donne. j'ai les droits d'admin, et je ne comprends pas pourquoi ça ne marche pas. J'ajoute que google n'a pas été mon ami, une bonne dizaine d'heures de recherche infructueuse :(

Faut-il rajouter quelque chose dans ma commande, entre la périodicité et le chemin vers le fichier ?

Merci, bonne journée