Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cron sur script php symfony

    19 janvier 2018 à 16:48:19

    Bonjour,

    Je suis chez infomaniak et j'ai pris un server cloud qui me permet d'effectuer des tâches CRON.

    Alors, j'ai ajouté un script qui est censé mettre à jour ma base de données chaque jour (nécessite authentification http).

    Si je lance l'url de mise à jour de la base de données depuis un browser (en l'occurence, firefox), tout fonctionne bien, ma base de données est mise à jour.

    Si je lance l'url de mise à jour de la base de données depuis cron, ma base de données n'est pas mise à jour, mais j'ai un statut de cron est à "OK".

    La réponse HTTP est 204

    Résumé du cron exécuté :
    ---------------------------------------------
    Nom du cron : Update
    Date : 19/01/2018 16:33:00
    Url : https://site1.com/fr/cron/update/
    Resultat : OK
    Detail : 204
    Reponse : No response
    ---------------------------------------------

    Auriez vous une idée sur comment faire ?

    Meilleures salutations et tous mes remerciements pour votre aide

    -
    Edité par ThiCre 19 janvier 2018 à 16:52:29

    • Partager sur Facebook
    • Partager sur Twitter
      19 janvier 2018 à 17:08:34

      Bonjour,

      Je ne comprends pas pourquoi tu passes par une url.

      Ton cron il est déclaré sur le serveur qui a la base de données je suppose ?

      Dans ce cas, le cron devrait lancer une commande console Symfony, non ?

      A+

      • Partager sur Facebook
      • Partager sur Twitter
        19 janvier 2018 à 17:55:41

        Bonjour monkey3d,

        En fait chez infomaniak, depuis le manager, tu peux mettre une url qui sera exécutée à l'heure que tu veux.

        Mais tu n'as pas accès au fichier Crontab pour ajouter des commande à exécuter, c'est le manager qui crée pour toi un Cronjob avec l'url que tu veux.

        Donc, j'ai créé mon Cronjob avec l'URL que je veux et ca ne me met pas à jour ma BD quand le Cron exécute la commande, mais ca me dit juste que le Cron a été exécuté avec succès.

        Par contre, si je mets mon URL dans firefox, que je m'autentifie, la base de données est mise à jour.

        • Partager sur Facebook
        • Partager sur Twitter
          19 janvier 2018 à 18:26:45

          Je ne connaissais pas Infomaniak mais tout ceci - et d'autres remarques sur ce forum - me font dire que je suis bien d'exploiter mon serveur chez moi ...

          Mais cela ne résoud pas ton problème.

          C'est sans doute le comportement du lancement de l'url par le manager qui ne correspond pas au lancement via un vrai navigateur mais pourquoi ?

          Désolé, je ne sais en dire plus.

          A+ 

          • Partager sur Facebook
          • Partager sur Twitter
            23 janvier 2018 à 14:59:58

            Bon bref, la solution est de mettre un script dans "web" qui appelle la route. Un script dans le genre :

            $url="https://www.site1.com/update";
            
            
            define('USERNAME','user');
            define('PASSWORD','1234');
            $ch=null;
            try 
            {
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, $url);
            	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
                curl_setopt($ch, CURLOPT_USERPWD, USERNAME . ":" . PASSWORD);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
                $resp = curl_exec($ch);
            }
            catch(Exception $ex) 
            {
            
            }

            et d'ajouter dans le security.yml :

                providers:
                    fos_userbundle:
                        id: fos_user.user_provider.username_email
                    in_memory:
                        memory:
                            users:
                                cronable: { password: $1y$12$zgf2bDTS0uITQLygYf6v/.Jm06HL5D0zVhe.t1cN1ZG33FWozseCA, roles: 'ROLE_CRON' }
                firewalls:
                    dev:
                        pattern: ^/(_(profiler|wdt))/
                        security: false
                    cron:
                        pattern: ^/(en|fr|de|it)/cron
                        http_basic: ~
                        form_login: false
                        anonymous: false
                        provider: in_memory
                access_control:
                    - { path: ^/en/cron/, role: ROLE_CRON }
                    - { path: ^/fr/cron/, role: ROLE_CRON }
                    - { path: ^/de/cron/, role: ROLE_CRON }
                    - { path: ^/it/cron/, role: ROLE_CRON }


            Et un controller avec une action dont la route ressemble à "cron/update"




            -
            Edité par ThiCre 23 janvier 2018 à 16:27:56

            • Partager sur Facebook
            • Partager sur Twitter

            Cron sur script php symfony

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown