====== File d'attente ou queue ====== La docs => https://laravel.com/docs/5.4/queues Installer **supervisord** Créer un fichier de config [program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /var/www/app.com/artisan queue:work --sleep=3 --tries=3 autostart=true autorestart=true user=www-data numprocs=8 redirect_stderr=true stdout_logfile=/var/www/app.com/storage/logs/worker.log Les options : * sleep : temps de pause en seconde entre chaque job * tries : nombre d'essaie en échec avant de passer dans la liste failed job * timeout : temps maxi en seconde qu'un job peut durer * memory : limite en Mo de la ram utilisé par le job * delay : délai avant de passer un job échoué dans la failed job list **php artisan queue:work** : permet de charger laravel en RAM et d'attendre qu'un job arrive. ATTENTION si vous modifiez le code de laravel, il ne sera pas pris en compte. Pour recharger laravel dans le queue:worker, 2 solutions : * avec supervisor supervisorctl restart laravel-worker:* * avec artisan php artisan queue:restart Pour executer un job, pour des tests, on peut lancer la commande php artisan queue:work --once Une alternative : **php artisan queue:listen** contrairement a queue:work qui lui ne charge laravel que la 1ere fois, queue:listen charge laravel, exécute le job et ferme laravel, et ceci à chaque job. Ca peut être bien en dev quand le code change souvent, mais a éviter en prod car ça utilise beaucoup de ressource. ===== Commande utile pour supervisor ===== Supervisor a un shell # supervisorctl supervisor> ? default commands (type help ): ===================================== add clear fg open quit remove restart start stop update avail exit maintail pid reload reread shutdown status tail version supervisor> mais on peut l'utiliser en ligne de commande. Si vous ajoutez un fichier de config, les commandes suivantes montre les nouveaux worker et les activent, puis les démarrent supervisorctl reread supervisorctl update supervisorctl start laravel-worker:* Si vous modifiez un fichier de config (sans changer le nom du program), la commande suivante restart le worker avec la nouvelle config supervisorctl update Pour tout stopper supervisorctl stop all ou un worker supervisorctl stop laravel-worker:* Pour tout restarter supervisorctl restart all ou un worker supervisorctl restart laravel-worker:* ===== Config laravel ===== Dans config/queue.php, mettez database par défaut 'default' => env('QUEUE_DRIVER', 'database'), Vérifiez aussi dans votre fichier .env QUEUE_DRIVER=database puis 'database' => [ 'driver' => 'database', 'table' => 'jobs', 'queue' => 'default', 'retry_after' => 90, ], Si vous mettez un nom de queue spécifique, soit vous le spécifiez dans le fichier de config 'database' => [ 'driver' => 'database', 'table' => 'jobs', 'queue' => 'mon_nom_de_queue', 'retry_after' => 90, ], soit vous le spécifiez dans la commande artisan command=php /var/www/app.com/artisan queue:work --tries=3 --queue=mon_nom_de_queue Le **retry_after** est le nombre de seconde avant de relancer un job qui génère une exception ===== Les failed ===== $ php artisan queue:failed +----+------------+---------+--------------------------------+---------------------+ | ID | Connection | Queue | Class | Failed At | +----+------------+---------+--------------------------------+---------------------+ | 3 | database | Imports | App\Jobs\ImportSubscribersFile | 2017-06-14 23:11:54 | | 2 | database | Imports | App\Jobs\ImportSubscribersFile | 2017-06-14 23:10:16 | | 1 | database | Imports | App\Jobs\ImportSubscribersFile | 2017-06-14 23:08:46 | +----+------------+---------+--------------------------------+---------------------+ $ php artisan queue:retry 1 The failed job [1] has been pushed back onto the queue! $ php artisan queue:forget 2 Failed job deleted successfully! ===== Vieux systeme avec Laravel 4 ===== Tuto en anglais => http://laravel.com/docs/queues Tuto en français => http://docs.laravel.fr/4.1/queues Super tuto => http://fideloper.com/ubuntu-beanstalkd-and-laravel4 On apprend à utiliser un gestionnaire asynchrone de tache => [[http://kr.github.io/beanstalkd/download.html|Beanstalkd]] On apprend à utiliser un service permettant de s'assurer qu'une commande tourne tout le temps => [[http://supervisord.org/|Supervisord]]