{"id":17783,"date":"2024-08-02T15:36:50","date_gmt":"2024-08-02T15:36:50","guid":{"rendered":"https:\/\/www.directimpactsolutions.com\/les-taches-planifiees-dans-laravel\/"},"modified":"2025-05-01T04:40:11","modified_gmt":"2025-05-01T04:40:11","slug":"les-taches-planifiees-dans-laravel","status":"publish","type":"post","link":"https:\/\/www.directimpactsolutions.com\/fr\/les-taches-planifiees-dans-laravel\/","title":{"rendered":"Les t\u00e2ches planifi\u00e9es dans Laravel"},"content":{"rendered":"<p>Les t\u00e2ches planifi\u00e9es dans Laravel sont utiles lorsque vous avez besoin d&rsquo;ex\u00e9cuter une t\u00e2che \u00e0 un moment donn\u00e9. Vous pourriez avoir besoin d&rsquo;exporter vers un fichier Excel tous les soirs, ou vous pourriez avoir besoin d&rsquo;envoyer un rappel \u00e0 un utilisateur \u00e0 une certaine heure. Vous pourriez cr\u00e9er un job Cron ou une t\u00e2che planifi\u00e9e pour chacune de ces t\u00e2ches s\u00e9par\u00e9ment, mais cela pourrait devenir difficile \u00e0 maintenir, surtout si vous avez beaucoup de t\u00e2ches planifi\u00e9es. Heureusement, <a href=\"https:\/\/www.directimpactsolutions.com\/fr\/laravel\/\">Laravel<\/a> dispose d&rsquo;un planificateur de t\u00e2ches int\u00e9gr\u00e9 qui vous permet de d\u00e9finir vos programmes au sein de votre application et de les ex\u00e9cuter \u00e0 l&rsquo;aide d&rsquo;une seule t\u00e2che Cron.   <\/p><figure class=\"wp-block-image size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"168\" src=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/04\/iStock-1405973719-300x168.jpg\" alt=\"Les t&#xE2;ches planifi&#xE9;es dans Laravel\" class=\"wp-image-16897\" srcset=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/04\/iStock-1405973719-300x168.jpg 300w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/04\/iStock-1405973719-1024x573.jpg 1024w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/04\/iStock-1405973719-768x429.jpg 768w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/04\/iStock-1405973719-600x335.jpg 600w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/04\/iStock-1405973719.jpg 1370w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure><div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><nav><ul><li class=\"\"><a href=\"#defining-schedules\">D\u00e9finition des planifications<\/a><\/li><li class=\"\"><a href=\"#frequency\">Fr\u00e9quence des planifications<\/a><\/li><li class=\"\"><a href=\"#constraints\">Contraintes des planifications<\/a><ul><li class=\"\"><a href=\"#custom-schedules\">Personnalisation des planifications<\/a><\/li><li class=\"\"><a href=\"#running-the-schedule\">Ex\u00e9cution des planifications<\/a><\/li><\/ul><\/li><li class=\"\"><a href=\"#further-scheduling-options\">Autres options pour les planifications<\/a><\/li><\/ul><\/nav><\/div><h2 class=\"wp-block-heading\" id=\"defining-schedules\" style=\"font-style:normal;font-weight:400\">D\u00e9finition des planifications<\/h2><p>Les planifications sont d\u00e9finies dans la m\u00e9thode <code>schedule<\/code> de la classe <code>App\\Console\\Kernal<\/code>. Par exemple, supposons que nous ayons une m\u00e9thode d&rsquo;archivage des anciennes commandes que nous voulons ex\u00e9cuter au d\u00e9but de chaque mois. Nous pourrions la d\u00e9finir comme suit :  <\/p><pre class=\"wp-block-code\"><code>&lt;?php\n\nnamespace App\\Console;\n\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\nuse App\\Models\\Order;\n\nclass Kernel extends ConsoleKernel\n{\n    \/**\n     * Define the application's command schedule.\n     *\/\n    protected function schedule(Schedule $schedule): void\n    {\n        $schedule-&gt;call(function () {\n            Order::archive();\n        })-&gt;monthly();\n    }\n}<\/code><\/pre><p>Il existe diff\u00e9rentes fa\u00e7ons de d\u00e9finir les planifications :<\/p><ul class=\"wp-block-list\"><li>Fermetures : Comme nous l&rsquo;avons vu dans l&rsquo;exemple ci-dessus, vous pouvez utiliser la m\u00e9thode <code>call<\/code> pour lancer une fermeture qui ex\u00e9cutera le code programm\u00e9.<\/li>\n\n<li>Objets invocables : Les classes PHP qui contiennent une m\u00e9thode <code>__invoke<\/code> peuvent \u00e9galement \u00eatre ex\u00e9cut\u00e9es \u00e0 l&rsquo;aide de la m\u00e9thode <code>call<\/code>. Par exemple, si vous avez un objet appel\u00e9 <code>OrderArchive<\/code> qui g\u00e8re la logique d&rsquo;archivage, vous pouvez d\u00e9finir le calendrier en utilisant <code>$schedule-&gt;call(new OrderArchive())-&gt;monthly()<\/code>. <\/li>\n\n<li>Commandes : En utilisant la m\u00e9thode <code>command<\/code>, vous pouvez planifier une commande Artisan ou une commande syst\u00e8me. Par exemple, si vous avez d\u00e9fini une commande appel\u00e9e <code>archive:orders<\/code> pour effectuer l&rsquo;archivage, vous pouvez d\u00e9finir la planification en utilisant <code>$schedule-&gt;command('archive:orders')-&gt;monthly()<\/code>. <\/li>\n\n<li>Jobs en file d&rsquo;attente : La m\u00e9thode <code>job<\/code> vous permet de planifier l&rsquo;ex\u00e9cution d&rsquo;un travail en file d&rsquo;attente. Par exemple, si vous avez d\u00e9fini un travail appel\u00e9 <code>ArchiveOrders<\/code> pour effectuer l&rsquo;archivage, vous pouvez d\u00e9finir la planification \u00e0 l&rsquo;aide de <code>$schedule-&gt;job(new ArchiveOrders)-&gt;monthly()<\/code>. <\/li><\/ul><h2 class=\"wp-block-heading\" id=\"frequency\" style=\"font-style:normal;font-weight:400\">Fr\u00e9quence des planifications<\/h2><p>Le planificateur de Laravel dispose de plus de 30 m\u00e9thodes pour d\u00e9finir la fr\u00e9quence d&rsquo;ex\u00e9cution de votre t\u00e2che planifi\u00e9e. Nous ne les \u00e9num\u00e9rerons pas toutes ici, mais voici quelques exemples : <\/p><ul class=\"wp-block-list\"><li>everyMinute();<\/li>\n\n<li>everyFiveMinutes();<\/li>\n\n<li>hourly();<\/li>\n\n<li>hourlyAt(20);<\/li>\n\n<li>daily();<\/li>\n\n<li>dailyAt(&rsquo;13:00&prime;);<\/li>\n\n<li>weekly();<\/li>\n\n<li>weeklyOn(1, &lsquo;8:00&rsquo;);<\/li>\n\n<li>monthly();<\/li>\n\n<li>twiceMonthly(1, 16, &rsquo;13:00&prime;);<\/li>\n\n<li>yearly();<\/li><\/ul><h2 class=\"wp-block-heading\" id=\"constraints\" style=\"font-style:normal;font-weight:400\">Contraintes des planifications<\/h2><p>Vous pouvez restreindre davantage votre horaire. Par exemple, si vous souhaitez programmer une notification qui ne sera envoy\u00e9e que pendant les heures de travail, vous pouvez proc\u00e9der comme suit : <\/p><pre class=\"wp-block-code\"><code>$schedule-&gt;call(function () {\n\tUser::sendNotification();\n})-&gt;hourly()\n\t-&gt;weekdays()\n\t-&gt;between(\"8:00\", \"18:00\");<\/code><\/pre><p>Pour une liste compl\u00e8te des fr\u00e9quences et des contraintes, visitez <a href=\"https:\/\/laravel.com\/docs\/10.x\/scheduling#schedule-frequency-options\" target=\"_blank\" rel=\"noreferrer noopener\">cette page de la documentation Laravel <\/a>(en anglais).<\/p><h3 class=\"wp-block-heading has-ast-global-color-2-color has-text-color has-link-color wp-elements-ca3ffa39321f29e91729080a58368c0d\" id=\"custom-schedules\">Personnalisation des planifications<\/h3><p>Si aucune des fr\u00e9quences ou contraintes fournies ne permet de cr\u00e9er la planification souhait\u00e9e, et que tu es familier avec l&rsquo;\u00e9criture d&rsquo;expressions Cron, vous pouvez utiliser la m\u00e9thode Cron en utilisant les expressions souhait\u00e9es.<\/p><p>\u00c0 titre d&rsquo;exemple, cette fonction doit s&rsquo;ex\u00e9cuter toutes les cinq minutes \u00e0 partir de 13 h et jusqu&rsquo;\u00e0 13 h 55, puis \u00e0 partir de 18 h et jusqu&rsquo;\u00e0 18 h 55 tous les jours :<\/p><pre class=\"wp-block-code\"><code>$schedule-&gt;call(function() {\n\t\/\/Add schedule code here\n})-&gt;cron('0\/5 13,18 * * ?');<\/code><\/pre><h3 class=\"wp-block-heading has-ast-global-color-2-color has-text-color has-link-color wp-elements-d061607220f737cab91c1983e6f4d84f\" id=\"running-the-schedule\">Ex\u00e9cution des planifications<\/h3><p>Le planificateur de Laravel peut \u00eatre ex\u00e9cut\u00e9 manuellement \u00e0 l&rsquo;aide de la commande <code>schedule:run<\/code>. Dans un environnement de production, vous cr\u00e9erez g\u00e9n\u00e9ralement une t\u00e2che Cron qui ex\u00e9cutera <code>artisan schedule:run<\/code> une fois par minute. <\/p><p>Dans un environnement de d\u00e9veloppement, vous n&rsquo;ex\u00e9cutez g\u00e9n\u00e9ralement pas de t\u00e2che Cron. \u00c0 la place, vous pouvez utiliser la commande <code>schedule:work<\/code>, qui ex\u00e9cutera la commande <code>schedule:run<\/code> une fois par minute. <\/p><h2 class=\"wp-block-heading\" id=\"further-scheduling-options\" style=\"font-style:normal;font-weight:400\">Autres options pour les planifications<\/h2><p>Le planificateur de Laravel dispose d&rsquo;un certain nombre d&rsquo;autres options qui sont utiles dans certaines circonstances. Si vous avez une t\u00e2che qui est ex\u00e9cut\u00e9e toutes les quelques minutes, mais qui peut avoir un temps d&rsquo;ex\u00e9cution tr\u00e8s variable, vous pouvez utiliser la m\u00e9thode <code>withoutOverlapping()<\/code> pour emp\u00eacher la t\u00e2che de s&rsquo;ex\u00e9cuter si l&rsquo;instance pr\u00e9c\u00e9dente de la t\u00e2che est toujours en cours d&rsquo;ex\u00e9cution. De m\u00eame, si vous avez une t\u00e2che qui prend beaucoup de temps \u00e0 s&rsquo;ex\u00e9cuter, vous pouvez utiliser la m\u00e9thode <code>runInBackground()<\/code> pour qu&rsquo;elle n&#8217;emp\u00eache pas d&rsquo;autres t\u00e2ches de s&rsquo;ex\u00e9cuter avant qu&rsquo;elle ne soit termin\u00e9e. Si plusieurs serveurs sont en cours d&rsquo;ex\u00e9cution, vous pouvez utiliser <code>onOneServer()<\/code> pour ex\u00e9cuter la t\u00e2che sur un seul serveur.   <\/p><p>Pour plus de d\u00e9tails sur le planificateur de t\u00e2ches de Laravel, consultez la <a href=\"https:\/\/laravel.com\/docs\/10.x\/scheduling\" target=\"_blank\" rel=\"noreferrer noopener\">documentation de Laravel<\/a> (en anglais).<\/p>","protected":false},"excerpt":{"rendered":"<p>Les t\u00e2ches planifi\u00e9es dans Laravel sont utiles lorsque vous avez besoin d&rsquo;ex\u00e9cuter une t\u00e2che \u00e0 un moment donn\u00e9. Vous pourriez avoir besoin d&rsquo;exporter vers un fichier Excel tous les soirs, ou vous pourriez avoir besoin d&rsquo;envoyer un rappel \u00e0 un utilisateur \u00e0 une certaine heure. Vous pourriez cr\u00e9er un job Cron ou une t\u00e2che planifi\u00e9e &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/www.directimpactsolutions.com\/fr\/les-taches-planifiees-dans-laravel\/\"> <span class=\"screen-reader-text\">Les t\u00e2ches planifi\u00e9es dans Laravel<\/span> Lire la suite >><\/a><\/p>\n","protected":false},"author":9,"featured_media":16898,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","footnotes":""},"categories":[37],"tags":[154],"class_list":["post-17783","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web","tag-laravel-fr"],"uagb_featured_image_src":{"full":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/04\/iStock-1405973719.jpg",1370,766,false],"thumbnail":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/04\/iStock-1405973719-150x150.jpg",150,150,true],"medium":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/04\/iStock-1405973719-300x168.jpg",300,168,true],"medium_large":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/04\/iStock-1405973719-768x429.jpg",768,429,true],"large":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/04\/iStock-1405973719-1024x573.jpg",1024,573,true],"1536x1536":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/04\/iStock-1405973719.jpg",1370,766,false],"2048x2048":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/04\/iStock-1405973719.jpg",1370,766,false],"woocommerce_thumbnail":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/04\/iStock-1405973719-300x300.jpg",300,300,true],"woocommerce_single":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/04\/iStock-1405973719-600x335.jpg",600,335,true],"woocommerce_gallery_thumbnail":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/04\/iStock-1405973719-100x100.jpg",100,100,true]},"uagb_author_info":{"display_name":"Alan Bruce","author_link":"https:\/\/www.directimpactsolutions.com\/fr\/author\/alan-bruce\/"},"uagb_comment_info":0,"uagb_excerpt":"Les t\u00e2ches planifi\u00e9es dans Laravel sont utiles lorsque vous avez besoin d&rsquo;ex\u00e9cuter une t\u00e2che \u00e0 un moment donn\u00e9. Vous pourriez avoir besoin d&rsquo;exporter vers un fichier Excel tous les soirs, ou vous pourriez avoir besoin d&rsquo;envoyer un rappel \u00e0 un utilisateur \u00e0 une certaine heure. Vous pourriez cr\u00e9er un job Cron ou une t\u00e2che planifi\u00e9e\u2026","_links":{"self":[{"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/posts\/17783","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/comments?post=17783"}],"version-history":[{"count":3,"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/posts\/17783\/revisions"}],"predecessor-version":[{"id":20055,"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/posts\/17783\/revisions\/20055"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/media\/16898"}],"wp:attachment":[{"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/media?parent=17783"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/categories?post=17783"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/tags?post=17783"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}