web-dev-qa-db-fra.com

Générer un processus d'arrière-plan en Ruby

J'écris un script d'amorçage Ruby pour un projet scolaire et une partie de ce processus consiste à démarrer deux processus d'arrière-plan (écrits et fonctionnant correctement). Ce que je voudrais faire est quelque chose comme:

`/path/to/daemon1 &`
`/path/to/daemon2 &`
`/path/to/daemon3 &`

Cependant, cela bloque le premier appel à exécuter daemon1. J'ai déjà vu des références à une méthode Process.spawn, mais cela semble être une fonctionnalité 1.9+, et je suis limité à Ruby 1.8.

J'ai également essayé d'exécuter ces démons à partir de différents threads, mais j'aimerais que mon script d'amorçage puisse se fermer.

Alors, comment puis-je démarrer ces processus en arrière-plan afin que mon script d'amorçage ne bloque pas et puisse se fermer (mais les démons sont toujours exécutés en arrière-plan)?

38
Dave DeLong

Tant que vous travaillez sur un système d'exploitation POSIX, vous pouvez utiliser fork et exec.

fork = Créer un sous-processus

exec = Remplacer le processus en cours par un autre processus

Vous devez ensuite informer que votre processus principal n'est pas intéressé par les sous-processus créés via Process.detach.

job1 = fork do
  exec "/path/to/daemon01"
end

Process.detach(job1)

...
64
Marcel Jackwerth

meilleure façon de pseudo-désamorcer:

`((/path/to/deamon1 &)&)` 

va déposer le processus dans son propre shell.

meilleure façon de réellement démoniser:

`service daemon1 start`

et assurez-vous que le serveur/utilisateur est autorisé à démarrer le démon lui-même. Découvrez l'outil 'désamoniser' pour Linux afin de configurer votre démon.

0
Ihate_SA_admins