---
title: "Un worker BullMQ, Celery ou Sidekiq en ligne, avec while.sh"
url: https://while.sh/fr/guides/worker-file-attente/
author: "Aloïs Oddon, cofondateur de Nextmap"
updated: 2026-11-02
---

# Faire tourner un worker en fond avec BullMQ, Celery ou Sidekiq, depuis votre agent IA

Les envois d'e-mails, les exports et les traitements lourds n'ont rien à faire dans vos requêtes. Branché à while par MCP, votre agent IA met en ligne le worker qui les fait en fond, avec sa file d'attente.

## Prérequis

- Une appli qui pose des tâches dans une file : BullMQ, Celery, RQ ou Sidekiq.
- Un agent IA qui travaille dans un terminal : Claude Code, Codex, Cursor ou Gemini CLI.

## Étape 1 : Donnez ces instructions à votre agent

Ouvrez votre agent dans le dossier de votre appli, et collez-lui ces instructions :

```text titre="Instructions"
Connecte-toi à while avec mon compte (while.sh/agents), puis mets mon appli en ligne.
```

Votre agent ajoute lui-même le serveur MCP de while. S'il vous le demande, relancez-le. Au premier appel à while, une page s'ouvre dans votre navigateur. Dans Claude Code, si elle ne s'ouvre pas, tapez /mcp, choisissez while, puis Authenticate. Sur cette page, choisissez « Une nouvelle appli », puis cliquez sur Autoriser.

## Étape 2 : Ouvrez votre appli

Votre agent vous donne l'adresse de votre appli, par exemple `https://mon-appli.while.cloud`, en HTTPS.

## Ce que fait votre agent

Il ajoute le worker et sa file à while.yaml :

```yaml titre="while.yaml"
apiVersion: while/v1
project: mon-appli
services:
  - name: web
    port: 3000
  - name: worker
    type: worker
    command: [node, worker.js]
caches:
  - name: file
    durable: true
```

Le worker tourne sans arrêt, sans adresse publique, avec le même code que votre appli. Sa file vit dans un cache compatible Redis, durable : rien ne se perd au redémarrage. Son adresse, mot de passe compris, arrive dans `REDIS_URL`, comme dans ce worker BullMQ (source 1) :

```js titre="worker.js"
import { Worker } from 'bullmq';
import IORedis from 'ioredis';

const connection = new IORedis(process.env.REDIS_URL, { maxRetriesPerRequest: null });

new Worker('emails', async (job) => {
  await envoyerEmail(job.data);
}, { connection });
```

## Lancer un worker Celery

> Vous, à votre agent : Ajoute un worker Celery pour les exports.

Votre agent déclare le worker avec la commande `celery -A monappli worker`, branché sur le même cache : il donne `REDIS_URL` à Celery, avec `broker=os.environ['REDIS_URL']`.

## Voir ce que fait votre worker

> Vous, à votre agent : Pourquoi les e-mails partent en retard ?

Votre agent lit les journaux du worker dans while, repère la tâche qui bloque et corrige.

## Ajouter de la mémoire

> Vous, à votre agent : Donne plus de mémoire au worker des exports.

Votre agent change `resources` dans while.yaml, et le worker repart avec, à la mise en ligne suivante.

## Revenir à la version d'avant

> Vous, à votre agent : Reviens à la version d'avant du worker.

La version d'avant du worker reprend en quelques secondes. Votre agent lit l'erreur dans les journaux, corrige et remet en ligne.

## Prochaines étapes

- [Lancer une tâche planifiée](/fr/guides/tache-planifiee/)
- [Ajouter un cache compatible Redis](/fr/guides/cache-redis/)
- [Mettre en ligne une appli Ruby on Rails](/fr/guides/appli-rails/)

## Sources

1. [BullMQ, les workers](https://docs.bullmq.io/guide/workers), 2026-11-02

## Questions

### Mon worker tourne-t-il en double pendant une mise à jour ?

Non : une nouvelle version remplace l'ancienne sans jamais tourner en double.

### Celery, RQ ou Sidekiq ?

Tous : le worker lance la commande de votre choix, avec le même code que votre appli.

### Et pour un travail à heure fixe ?

Une tâche planifiée coûte moins : elle ne tourne que le temps du travail.

### Mon worker a-t-il une adresse publique ?

Non, il tourne sans adresse : personne ne peut l'appeler de l'extérieur.
