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)?
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)
...
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.