Запускает фоновый процесс в Ruby
-
22-09-2019 - |
Вопрос
Я пишу скрипт начальной загрузки ruby для школьного проекта, и частью этого процесса начальной загрузки является запуск пары фоновых процессов (которые написаны и функционируют должным образом).То, что я хотел бы сделать, это что-то вроде:
`/path/to/daemon1 &`
`/path/to/daemon2 &`
`/path/to/daemon3 &`
Однако это блокируется при первом вызове для выполнения daemon1.Я видел ссылки на Process.spawn
метод, но это, кажется, функция 1.9+, и я ограничен Ruby 1.8.
Я также пытался запустить эти демоны из разных потоков, но я бы хотел, чтобы мой загрузочный скрипт мог завершаться.
Итак, как я могу запустить эти фоновые процессы, чтобы мой скрипт начальной загрузки не блокировался и мог завершиться (но демоны все еще работали в фоновом режиме)?
Решение
Пока вы работаете на POSIX OS, вы можете использовать fork
и exec
.
fork
= Создать подпроцесс
exec
= Заменить текущий процесс другим процессом
Затем вам нужно сообщить, что ваш основной процесс не заинтересован в созданных подпроцессах через Process.detach
.
job1 = fork do
exec "/path/to/daemon01"
end
Process.detach(job1)
...
Другие советы
лучший способ псевдо-деамонизации:
`((/path/to/deamon1 &)&)`
отбросит процесс в его собственную оболочку.
лучший способ на самом деле демонизировать:
`service daemon1 start`
и убедитесь, что сервер / пользователь имеет разрешение на запуск реального демона.ознакомьтесь с инструментом 'deamonize' для Linux, чтобы настроить свой deamon.