web-dev-qa-db-fra.com

Exécution d'une commande en tant que processus/service en arrière-plan

J'ai une commande Shell que j'aimerais exécuter en arrière-plan et j'ai lu que cela pouvait être fait en ajoutant un & à la commande, ce qui le faisait fonctionner en arrière-plan, mais j'avais besoin de plus de fonctionnalités et je me demandais Comment s'y prendre:

  1. J'aimerais que la commande démarre et s'exécute en arrière-plan à chaque redémarrage du système.
  2. J'aimerais pouvoir le démarrer et l'arrêter au besoin, comme on peut le faire service Apache2 start.

Comment puis-je m'y prendre? Existe-t-il un outil qui me permet d'exécuter une commande en tant que service?

Je suis un peu perdu avec ça.

Merci

12
Mridang Agarwalla

Examinez la commande daemon , qui peut transformer des processus arbitraires en démons. Cela permettra à votre script d'agir en tant que démon sans que vous ayez à faire beaucoup de travail supplémentaire. L'étape suivante consiste à l'invoquer automatiquement au démarrage. Pour savoir comment procéder, vous devez fournir votre système d'exploitation (ou, pour Linux, votre distribution).

21
Sorpigal

Les systèmes UNIX peuvent gérer simultanément autant de processus que nécessaire (ouvrez simplement une nouvelle fenêtre Shell si vous êtes dans une interface graphique). Il est donc nécessaire d'exécuter un processus en arrière-plan uniquement si vous devez continuer à utiliser la fenêtre Shell actuelle. une fois que vous avez exécuté une application ou un processus qui continue à s'exécuter.

Pour exécuter une commande appelée command en mode arrière-plan, vous devez utiliser:

command &

C'est un caractère spécial qui vous renvoie à la commande Invite une fois le processus démarré. Il y a d'autres caractères spéciaux qui font d'autres choses, plus d'infos sont disponibles ici .

24
MattMatt

Basé sur cet article:
http://felixmilea.com/2014/12/running-bash-commands-background-properly/

... un autre bon moyen est avec screen par exemple:

screen -d -m -s "my session name" <command to run>

à partir du screen manual :

-d -m
Écran d'accueil en mode détaché. Cela crée une nouvelle session mais ne s'y attache pas. Ceci est utile pour les scripts de démarrage du système.

c'est-à-dire que vous pouvez fermer votre terminal, le processus continuera à s'exécuter (contrairement à &)

avec screen, vous pouvez également vous reconnecter à la session ultérieurement

3
Anentropic

Pour un contrôle de travail avancé avec bash, vous devriez vous pencher sur les commandes jobsbg et fg.

Cependant, il semble que l'exécution de la commande en arrière-plan ne vous intéresse pas vraiment. Ce que vous voulez faire, c'est lancer la commande au démarrage. La manière de procéder varie en fonction du système Unix que vous utilisez, mais essayez de regarder dans la famille de fichiers rc (/etc/rc.local par exemple sur Ubuntu). Ils contiennent des scripts qui seront exécutés après le script init.

1
rahmu

Utilisez Nohup en dirigeant la sortie vers/dev/null

Nohup command &>/dev/null &

0
philip mudenyo