Exécuter le script Bash en arrière-plan et quitter le terminal


Réponses:


45

Pour éviter que les signaux de sortie ne se propagent aux processus enfants du terminal et du shell, exécutez la commande avec nohup, c'est-à-dire:

nohup cmd &

1
Ceci est la bonne réponse. Sans nohup, le processus démarré est toujours considéré comme un "enfant" du processus terminal et donc terminé si le terminal est fermé.
Izzy

3
cmd & disownfonctionne aussi, car le &est traité comme un ;séparateur de commandes. La commande disown supprime la connexion entre la session shell bash et la commande en arrière-plan.
lornix

2
zsh a un raccourci pour cela: cmd &|.
Thor

Pour que cela fonctionne, j'ai dû changer une préférence dans Terminal.app. Sous Profils, sélectionnez votre profil actif, puis Shell> Lorsque le shell se termine> Fermer si le shell est sorti proprement
Antoine

6

En utilisant screen:

screen -S <session name> -d -m <your command>

après cela, vous pouvez quitter le terminal, vous pouvez également le rattacher en:

screen -r <session name>

Plus d'infos: référence


4

Si vous souhaitez exécuter une commande ou un fichier spécifique toutes les secondes environ en arrière-plan après avoir quitté le terminal, vous pouvez essayer cette petite chose facile;

nohup watch -n5 'bash script.sh' &

Cela exécuterait scipt.sh toutes les 5 secondes.


1
"nohup" est déjà couvert par la réponse acceptée. Et je suis à peu près sûr que le demandeur a mentionné cron parce qu'ils l'utilisaient pour dire "Exécutez cette commande quelques secondes dans le futur", pas pour l'exécuter périodiquement.
David Richerby

1
Ma réponse n'aggrave pas les choses. Voyez le point de vote vers le bas. Neural serait suffisant.
jamietelin

3

Mettez un caractère "&" après votre commande.

par exemple:

/home/your/script.sh &

7
dans ce cas, lorsque le terminal est fermé, le processus est également lancé par /home/your/script.sh- car il n'a pas été détaché de son "parent", mais simplement "en arrière-plan". Utilisez nohuppour le détacher pour de vrai.
Izzy

Mon mauvais, je ne le savais pas, mais quand j'ai testé sur mon Debian, la commande a continué à s'exécuter après la fermeture du shell qui l'a lancée: /
Flinth

1
Je ne sais pas exactement où le processus en arrière-plan est attaché et quand. Mais si vous vous connectez, par exemple, à une machine distante, il est définitivement arrêté dès que vous vous déconnectez (sauf s'il s'est démonifié ). Donc, pour être sûr à 100%, vous utilisez plutôt nohup- qui enregistre également toutes les sorties (désormais invisibles) dans un fichier appelé nohup.outsitué dans le répertoire à partir duquel vous avez démarré la commande.
Izzy

D'accord, merci pour vos explications ^^
Flinth

Cette réponse peut fonctionner correctement lorsqu'elle est combinée avec la jobscommande. Très souvent, je veux pouvoir revenir au processus shell après l'avoir mis en arrière-plan.
djangofan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.