Создайте фоновый процесс в Ruby - PullRequest
40 голосов
/ 24 марта 2010

Я пишу скрипт начальной загрузки ruby ​​для школьного проекта, и частью этого процесса начальной загрузки является запуск нескольких фоновых процессов (которые написаны и работают правильно). То, что я хотел бы сделать, это что-то вроде:

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

Однако, это блокирует при первом вызове выполнить daemon1. Я видел ссылки на метод Process.spawn, но это, кажется, функция 1.9+, и я ограничен Ruby 1.8.

Я также пытался запустить эти демоны из разных потоков, но я бы хотел, чтобы мой скрипт начальной загрузки мог завершиться.

Итак, как я могу запустить эти фоновые процессы, чтобы мой скрипт начальной загрузки не блокировался и мог выйти (но при этом все еще работали демоны в фоновом режиме)?

Ответы [ 2 ]

65 голосов
/ 24 марта 2010

Пока вы работаете в POSIX OS, вы можете использовать fork и exec.

fork = Создать подпроцесс

exec = Заменить текущий процесс другим процессом

Затем вам нужно сообщить, что ваш основной процесс не заинтересован в созданных подпроцессах через Process.detach.

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

Process.detach(job1)

...
0 голосов
/ 18 февраля 2017

лучший способ псевдо-деамонизации:

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

поместит процесс в собственную оболочку.

лучший способ на самом деле демонизировать:

`service daemon1 start`

и убедитесь, что сервер / пользователь имеет разрешение на запуск фактического демона. проверьте инструмент deamonize для linux, чтобы настроить свой демон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...