BASH : lancer une tâche en arrière-plan et fermer le terminal sans interrompre la tâche

Bash

J’ai récemment mis à jour mon article sur Rsync pour rapatrier quelques fichiers du serveur vers mon NAS Synology et me suis demandé comment je pouvais faire pour ouvrir un terminal, lancer un Rsync qui va sûrement me prendre des heures et fermer le terminal sans que cela interrompe la sauvegarde.

Voici quelques pistes pour lancer une commande en arrière-plan avec BASH.

Créer un sous-shell

On crée un sous-shell (subshell) en lançant la commande avec des parenthèses. Le signe & (ampersand) est nécessaire, tout comme la commande exit qui permet de quitter proprement le terminal sans terminer le processus :

(sleep 100) & exitCode language: PHP (php)

On ouvre un autre terminal et on vérifie que notre tâche est toujours en cours :

ps aux | grep sleep

Utiliser disown

Une autre manière de faire est d’utiliser disown :

sleep 60 & disown

Le système attribue un numéro de processus à notre tâche. On peut alors fermer le terminal comme un barbare, la tâche reste en cours :

ps aux | grep sleep

A garder sous le coude.

Rencontrez-vous des défis avec votre site WordPress ou WooCommerce? Laissez-moi les résoudre pour vous.

Discutons des solutions possibles »

Matt

Matt Biscay est développeur WordPress et WooCommerce certifié chez Codeable, ainsi que sysadmin qualifié et enseignant-chercheur. Passionné par le code performant et les solutions sécurisées, je m'efforce d'offrir une expérience utilisateur exceptionnelle sur chaque projet.

Vous avez aimé cet article ? Vous avez un projet en tête et vous pensez que je pourrais vous aider à le concrétiser ? N'hésitez pas à me contacter, je serais ravi de discuter avec vous de votre projet !

2 pensées sur “BASH : lancer une tâche en arrière-plan et fermer le terminal sans interrompre la tâche”

  1. Y’a aussi avec screen, qui permet de créer des terminaux “virtuels”:
    screen -S rsync
    *on lace rsync etc*
    Pour revenir au terminal principal : ctrl+a, d
    Et pour revenir sur rsync : screen -r rsync

    Reply

Opinions