Bonjour,

J'espère être dans la bonne section, je développe sur symfony 4 en PHP 7,

Pour faire un système d'alerte, j'ai besoin d'avoir un script qui parcoure mes annonces et qui alerte certaines personne si l'annonce peut les interesser. J'aimerai faire tourner mon algorythme régulièrement à l'aide des tâches CRON.

J'ai donc créer une commande alerte sous symfony que j'appelle via mon terminale de la manière suivante : php bin/console app:alerte, et le script s'effectue parfaitement bien.

Seulement, je suis bloquer ici, car j'ai un herbegement mutualisé chez OVH et ce dernier ne me permet pas d'executer des commandes en CRON(sh ou autre), mais me demande de donner le chemin du fichier a executer.

Ainsi, ayant besoin des fonctionnalités de symfony dans mes tâches crons, quelles sont les solutions ?

J'aimerai vraiment utilisé les commandes symfony qui sont très pratiques, si cela n'est pas possible avec mon herbegement mutualisé, alors j'ai potentiellement pensé à faire un appel d'url via CURL et basculer ma commande en URL dans mon controller.

Qu'en pensez vous ?

Merci d'avance pour vos retours

Antoine

4 réponses


je ne connais pas OVH j'utilise uniquement Informaniak. Chez infomaniak il est possible de définir des tâches crons. Pas cron au sens unix mais au sens web, c-à-d qu'il permet de lancer un script PHP qui se trouve dans le répertoire public de Symfony mais géré avec les mêmes règles qu'un cron unix, lancé le script toutes les minutes, ou 1x par jour à 2h du matin, etc.... IL doit être dans le répertoire public parce que le système de cron infomaniak y accède en http comme si c'était un visiteur qu'y viendrait visiter l'url du script. Du coup vue que c'est un script php dans public il est possible de lancer une commande symfony via ce script, et d'y associé un login et passwd pour éviter que tout le monde le lance.
Tu n'as pas cette possibité sur OVH ?

antoine0
Auteur

Merci pour ton retour,

Chez OVH, on n'a pas accès au fichier Cron, en revanche on peut créer des tâches cron une par une, en indiquant le chemin vers un fichier qui doit pouvoir être exécuter par OVH.

Je pense donc que la seule solution serait de faire un fichier php via cURL qui appelle une de mes URL symfony..

ben du coup c'est tout bon, non ? C'est à quoi je pensais et c'est exactement ce que l'on peut faire sur Infomaniak.
Tu peux faire une tâche cron depuis OVH, crée un script mon_cron.php dans ton dossier public de Symfony, donne à OVH le chemin de ce fichier puis la récurence que tu souhaites.

Dans le script lance la commande shell_exec de php sur la console de symfony et tout devrait fonctionner.

Exemple de script qui je pense devrait fonctionner pour lancer le cron :

<?php

/** @var Composer\Autoload\ClassLoader */
require __DIR__.'/../vendor/autoload.php';

use Composer\Autoload\ClassLoader;
use Symfony\Bundle\FrameworkBundle\Console\Application;

$output = shell_exec('cd .. ; php bin/console --env=prod app:ma_commande');
// Ici tu peux par exemple créer un ficher log dans /var/cron/ et mettre le résultat de output, mettre dans un try and catch et lever une exception etc...

exit;

Si tu ne veux pas que le script peut être lancé par n'importe qui met une simple authentification avant la ligne du shel exec, si OVH te permet de spécifier un utilisateur et mot de passe par tâche.

antoine0
Auteur

Hello,

Effectivement je n'avais pas pensée a faire comme cela, il faudrait que j'essaye, mais OVH est vraiment pas facile avec le SSH,

Pour l'instant j'ai fais un petit système qui marche pas trop mal, j'appelle un URL en via mon fichier mon_cron.php via cURL (et non une commande), et si je veux que mon URL ne soit pas appeler par n'importe qui je fais juste passé une clef en POST dans mon fichier cURL.