problème d'accès cron avec php/mysql

Discussion dans 'Administration d'un site Web' créé par Gaulois, 20 Août 2009.

  1. Gaulois
    Gaulois Nouveau WRInaute
    Inscrit:
    20 Août 2009
    Messages:
    32
    J'aime reçus:
    0
    Bonjour

    Je suis en train de faire une requête cron pour pour lancer un fichier php et dedans j'ai une connexion à une base de données qui doit ce faire.
    Mais j'ai 2 messages d'erreurs :
    PHP Warning: mysql_query(): Access denied for user 'test'@'localhost' (using password: NO)
    PHP Warning: mysql_query(): A link to the server could not be established

    Pourtant lorsque je lance le fichier directement sans passer par une tâche cron, tout se passe sans problème.
    Donc ma connexion a ma BDD est bonne.
    Je pense donc que c'est cron qui me pose un problème d'accès mais je ne vois pas comment.

    Si je lance juste une tâche cron avec un phpinfo() dedans, tout se passe bien.

    J'ai un serveur avec un administration sous Plesk.

    J'attends vos solutions avec impatience.

    Gaulois
     
  2. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    Bonjour,

    Et dans ton fichier de configuration, tu te connectes à mysql avec le login "test" et sans mot de passe ?
    Sinon via les tâches cron, le répertoire d'inclusion apache n'est pas pris en compte et peut donc poser des soucis si tu as un fichier de connexion à côté du script.
     
  3. Gaulois
    Gaulois Nouveau WRInaute
    Inscrit:
    20 Août 2009
    Messages:
    32
    J'aime reçus:
    0
    C'est cela qui est étrange, j'ai bien l'utilisateur test avec un mot de passe.
    Alors que là, on me dit l'inverse.
     
  4. NxtGen
    NxtGen WRInaute impliqué
    Inscrit:
    24 Octobre 2006
    Messages:
    563
    J'aime reçus:
    0
    Il peut y avoir plusieurs causes :
    - Vérifie le chemin des includes si tu en as, et met l'adresse absolue (/home/tonsite/www/includes.php par exemple)
    - Vérifie que l'utilisateur qui exécute le cron ait bien les droits d'accès aux fichiers que tu veux lui faire lire.
     
  5. Gaulois
    Gaulois Nouveau WRInaute
    Inscrit:
    20 Août 2009
    Messages:
    32
    J'aime reçus:
    0
    Je mets bien l'adresse absolue.
    Et par contre je vérifie comment que l'utilisateur qui exécute le cron ait bien les droits? dans le fichier sudoers?

    Merci de vos réponses :)
     
  6. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    Quand tu lances toi-même la ligne de commande figurant dans ton cron, cette erreur apparaît ? quelle est cette ligne ?

    Je doute que l'utilisateur cron ai une quelconque importance, c'est mysql qui n'accepte pas la connexion faute de mot de passe. D'ailleurs mysql ne se préoccupe que du serveur effectuant la demande, du login et du mot de passe. (utilisateur test bien déclaré en localhost ?)
     
  7. Gaulois
    Gaulois Nouveau WRInaute
    Inscrit:
    20 Août 2009
    Messages:
    32
    J'aime reçus:
    0
    Ma tâche cron appel juste un fichier PHP où dedans j'appel une BDD.
    Donc je lance mon fichier directement sur mon serveur.
    Et là, pas de problème, les données sont inscrits dans ma BDD, aucune erreur.

    Et comme tu le dis, ce qui est étonnant c'est que la tâche cron n'accepte pas la connexion alors que tout se passe bien lorsque je le lance sur mon serveur.
     
  8. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    Pour bien se comprendre, quand tu dis "je lance mon fichier directement sur mon serveur", cela n'est pas via un navigateur internet mais bien en ligne de commande ?
    Tu travailles en ligne de commande ou via une interface d'administration ?
     
  9. Gaulois
    Gaulois Nouveau WRInaute
    Inscrit:
    20 Août 2009
    Messages:
    32
    J'aime reçus:
    0
    Non c'est bien dans mon navigateur que je lance mon fichier.
    C'est un fichier php tout ce qu'il y a de plus basique.
    Je veux utiliser cron puisque ce fichier doit être lancer tous les jours.
    Je fais ma tâche cron avec une administration sous Plesk.
     
  10. Gaulois
    Gaulois Nouveau WRInaute
    Inscrit:
    20 Août 2009
    Messages:
    32
    J'aime reçus:
    0
    Je pense donc que mon utilisateur n'a pas les droits dans cron.
    J'ai un accès en SSH mais je n'ai pas encore trouvé l'endroit ou je peux voir si mon utilisateur a suffisamment de droits pour effectuer cette tâche cron.

     
  11. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    Ce type d'erreur apparait seulement quand tu n'as pas effectué la connexion à ta base de données au préalable.
    Si la connexion avait échoué, cela aurait été :
    Warning: mysql_connect(): Access denied for user 'test'@'localhost' (using password: NO)

    Donc le soucis se trouve bien dans l'include de ton fichier de connexion.
    Vérifie les droits de ce fichier également, il y a de fortes chances que le soucis soit ici.
     
  12. Gaulois
    Gaulois Nouveau WRInaute
    Inscrit:
    20 Août 2009
    Messages:
    32
    J'aime reçus:
    0
    Je n'ai pas fait de fichiers différents pour ma connexion, toutes les informations se trouvent directement dans le fichier que j'appel.

    ps : regarde j'ai remis un post juste avant que tu réponds
     
  13. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    Il y a bien un soucis dans ton fichier ^^
    Il n'y a pas d'appel à mysql_connect sauf si tu masques les erreurs...

    Peut-on avoir un aperçu de ta connexion (met des étoiles à la place du mot de passe ^^)
     
  14. Gaulois
    Gaulois Nouveau WRInaute
    Inscrit:
    20 Août 2009
    Messages:
    32
    J'aime reçus:
    0
    Si j'ai bien un appel à ma base avec mysql_connect

    Code:
    $connexion_sql = mysql_connect("localhost", "root", "") or die ('Erreur de connexion à MySQL '.mysql_error()); // Connexion à MySQL
    $bdd_sql = mysql_select_db("test") or die ('Erreur de connexion à la base de données '.mysql_error()); // Sélection de la base
    ps : j'ai mis ma connexion en local mais comme je te l'ai dis ce n'est pas ma connexion à la base qui déconne pour moi c'est mon utilisateur sous cron
     
  15. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    Euuuuuuh là ton login à ta BDD, c'est "root", dans l'erreur c'est écrit "test", y'a déjà un soucis quelque part ^^.
    D'ailleurs comment obtiens-tu ces erreurs générées via cron ? dans les logs ? Il n'y a rien d'autre qui précède ?

    Je ne peux t'aider davantage ce soir, au lit !
     
  16. Gaulois
    Gaulois Nouveau WRInaute
    Inscrit:
    20 Août 2009
    Messages:
    32
    J'aime reçus:
    0
    Merci beaucoup de t'intéresser à mon problème.
    Je fais de même, je te réponds demain. :)
     
  17. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    Je suis levé donc si tu as toujours besoin d'aide, merci de répondre au post précédent :)
     
  18. Gaulois
    Gaulois Nouveau WRInaute
    Inscrit:
    20 Août 2009
    Messages:
    32
    J'aime reçus:
    0
    test correspond au nom de l'utilisateur qui fait la tâche cron alors que root correspond au nom d'utilisateur qui effectue la BDD.
    C'est donc normal que cela ne soit pas les même car ils sont totalement indépendant.

    Lorsque je génère une crontab, je reçois un mail avec les erreurs.

    Je viens de faire des tests, c'est pour cela que je suis aussi long à te répondre ;)
    ET je pense que j'ai trouvé la cause à mon problème.

    Code:
    if(isset($_SERVER['SERVER_NAME'])) 
        {
            $nom_serveur = $_SERVER['SERVER_NAME'];
        }
    
        if($nom_serveur == "localhost")
        {
            $connexion_sql = mysql_connect("localhost", "root", "") or die ('Erreur de connexion à MySQL '.mysql_error()); // Connexion à MySQL
            $bdd_sql = mysql_select_db("nom_base") or die ('Erreur de connexion à la base de données '.mysql_error()); // Sélection de la base
        }
        else if($nom_serveur == "www.site.com")
        {
            $connexion_sql = mysql_connect("site.com", "user", "pwd") or die ('Erreur de connexion à MySQL '.mysql_error()); // Connexion à MySQL
            $bdd_sql = mysql_select_db("nom_base")or die ('Erreur de connexion à la base de données '.mysql_error()); // Sélection de la base
        }
        else
        {
            echo "erreur";
        }
    Je fais donc un test pour identifier si je suis en local ou sur mon serveur.
    Et lorsque je lance une tâche cron, j'obtiens le message "erreur".
    Et $nom_serveur est vide.
    Je pense donc que avec cron, on n'obtient pas le nom du serveur.

    La nouvelle question est donc : comment faire pour l'obtenir même en lançant une tâche cron.
     
  19. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 636
    J'aime reçus:
    0
    C'est normal, cela n'est pas défini via cron mais je doute que cela soit ça qui génère le soucis.

    Cependant une solution pour ceci, mettre au préalable :

    Code:
    if (isset($_SERVER['SHELL'])) { //si exécuté via cron
    $_SERVER["SERVER_NAME"] = "localhost";
    }
     
  20. Gaulois
    Gaulois Nouveau WRInaute
    Inscrit:
    20 Août 2009
    Messages:
    32
    J'aime reçus:
    0
    Salut

    Je viens de tester ton "$_SERVER['SHELL']" et çà marche. Il détecte bien qu'il est lancé par cron.
    Par contre je ne connais pas du tout cette option de $_SERVER, même sur le site officiel je ne trouve rien, tu as trouvé cela ou?
    En connais tu d'autres qui ne marchent que en shell?
    Car j'aimerais quand même pouvoir détecter sur quel serveur je suis.

    merci de tes réponses tu me fais bien avancé :)

    Gaulois
     
  21. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 170
    J'aime reçus:
    344
  22. Gaulois
    Gaulois Nouveau WRInaute
    Inscrit:
    20 Août 2009
    Messages:
    32
    J'aime reçus:
    0
    Merci du lien mais je suis déjà aller voir et on ne parle pas de $_SERVER['SHELL'] à part une petite ligne dans les exemples.
     
  23. Gaulois
    Gaulois Nouveau WRInaute
    Inscrit:
    20 Août 2009
    Messages:
    32
    J'aime reçus:
    0
    Je viens de voir et de tester par contre une autre variable dans les exmples : $_SERVER["PWD"].
    Elle me donne un chemin : var/www/vhosts/nomsite.com. ce qui est donc ce que je recherche.
    Mais pour moi PWD veut dire password alors pourquoi je me retrouve avec le chemin de mon site?
     
  24. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 170
    J'aime reçus:
    344
    PWD peut aussi vouloir dire "Print Working Directory"
     
  25. Gaulois
    Gaulois Nouveau WRInaute
    Inscrit:
    20 Août 2009
    Messages:
    32
    J'aime reçus:
    0
    D'accord je ne savais pas.
    merci de ta réponse
     
  26. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 596
    J'aime reçus:
    34
    Sous toutes réserves...

    Si tu lances ton script php en mode cli ( c'est-à-dire sans l'appeler à distance par un programme type curl ou wget ), à ce moment-là le répertoire par défaut n'est pas pris en compte, à moins de spécifier dans le script php en amont, de l'include ( si l'include est en relatif ), avec la commande chdir() le répertoire du script php.

    C'est indiqué noir sur blanc sur le site du PHP Manual.

    Donc, si tacommandes cron est du type: 'php gnangnan /chemin_absolu/script.php', le gnangnan pouvant être le paramètre -f je crois, ou bien si ton script a comme première ligne: #!/bin/php ou /bin/ est le chemin de l'interpréteur php mode cli, le problème semblerait être tel que je l'indique.

    Amicalement.

    Jean-François Ortolo
     
  27. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 596
    J'aime reçus:
    34

    Je vous demande pardon ;)

    Je n'avais pas lu les récents messages.

    Pour avoir le nom du serveur alimenté correctement, ce qui semble obligatoire dans ton cas, il suffit de simuler un accès à distance, avec de préférence la commande curl

    Donc... Tu vires la première ligne de ton script php : #!/bin/php ou équivalent si elle existe, puis tu met comme commande cron:

    '/chemin_absolu/curl -L http://www.ndd/chemin/script.php'

    Le paramètre -L est pour permettre si besoin, jusqu'à 50 redirections de curl ( pas besoin à priori ).

    Le mieux est encore de mettre cette ligne dans un script en Bourne Shell:

    #!/bin/sh
    /chemin_absolu/curl - L "http://www.ndd/chemin/script.php"


    En effet, il me semble que des apostrophes sont nécessaires, pour entourer l'url appelée.

    Amicalement.

    Jean-François Ortolo
     
  28. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 596
    J'aime reçus:
    34

    Bonjour

    La commande Shell sous Linux pour visualiser le répertoire courant, est: pwd

    C'est très simple.

    Amicalement.

    Jean-François Ortolo
     
  29. Gaulois
    Gaulois Nouveau WRInaute
    Inscrit:
    20 Août 2009
    Messages:
    32
    J'aime reçus:
    0
    Merci c'est ce que je cherchais.
     
  30. Gaulois
    Gaulois Nouveau WRInaute
    Inscrit:
    20 Août 2009
    Messages:
    32
    J'aime reçus:
    0
    Je ne vois pas d'endroit ou je peux modifier mon post pour mettre résolu, je peux le faire?

    Merci à tous ceux qui m'ont aidé.
     
Chargement...
Similar Threads - problème accès cron Forum Date
Problème tâche cron et htaccess Administration d'un site Web 6 Septembre 2005
Problème htaccess Développement d'un site Web ou d'une appli mobile 26 Mai 2020
Problème de log et htacces Débuter en référencement 8 Juin 2019
Problème redirect 301 avec fichier htaccess URL Rewriting et .htaccess 19 Juillet 2018
htaccess avec redirection problème sécurisation URL Rewriting et .htaccess 16 Juin 2018
Problème de redirection .htaccess dans un seul cas URL Rewriting et .htaccess 7 Avril 2018
Probleme des liens 404 au niveau du fichier htaccess Problèmes de référencement spécifiques à vos sites 6 Octobre 2017
Problème accent URL Rewriting et .htaccess URL Rewriting et .htaccess 4 Novembre 2016
Problème HTACCES wordpress Débuter en référencement 26 Mars 2016
Problème d'accès à la partie Acquisition - Présentation Google Analytics 14 Mars 2016
Problème Htaccess Netlinking, backlinks, liens et redirections 18 Janvier 2016
Problème htaccess URL Rewriting et .htaccess 11 Janvier 2016
Help: Problème de Redirection .htaccess suite erreur noms de pages Netlinking, backlinks, liens et redirections 6 Septembre 2015
Problème variables $_POST non accessible en mode "prerender". Développement d'un site Web ou d'une appli mobile 15 Août 2015
Probleme de redirection de lien avec htaccess URL Rewriting et .htaccess 20 Juin 2015
Htaccess -> 301- Problème Joomla 2.5.x ? URL Rewriting et .htaccess 14 Juin 2015
Problème de blocage de téléchargement fichiers PDF avec htaccess URL Rewriting et .htaccess 9 Février 2015
Probleme avec certaines de mes redirections permanente (htaccess) Netlinking, backlinks, liens et redirections 23 Janvier 2015
Problème avec mon htaccess URL Rewriting et .htaccess 29 Novembre 2014
Htaccess et RewriteRule | problème URL Rewriting et .htaccess 25 Septembre 2014