Как получить результаты процесса, используя Бога? - PullRequest
0 голосов
/ 01 ноября 2018

Попытка получить простую Бог демонстрационную работу.

В пустой директории я создал следующие файлы согласно документации Бога:

simple.rb:

loop do
  puts 'Hello'
  sleep 1
end

simple.rb:

God.watch do |w|
  w.name = "simple"
  w.start = "ruby simple.rb"
  w.log = 'myprocess.log'
  w.keepalive
end

Тогда я бегу:
$ sudo god -c simple.god -D

и получите этот вывод:

I [2018-10-31 23:19:39]  INFO: Loading simple.god
I [2018-10-31 23:19:39]  INFO: Syslog enabled.
I [2018-10-31 23:19:39]  INFO: Using pid file directory: /var/run/god
I [2018-10-31 23:19:39]  INFO: Started on drbunix:///tmp/god.17165.sock
I [2018-10-31 23:19:39]  INFO: simple move 'unmonitored' to 'init'
I [2018-10-31 23:19:39]  INFO: simple moved 'unmonitored' to 'init'
I [2018-10-31 23:19:39]  INFO: simple [trigger] process is running (ProcessRunning)
I [2018-10-31 23:19:39]  INFO: simple move 'init' to 'up'
I [2018-10-31 23:19:39]  INFO: simple registered 'proc_exit' event for pid 11741
I [2018-10-31 23:19:39]  INFO: simple moved 'init' to 'up'

но я не могу зафиксировать фактический результат наблюдаемого процесса. Файл «myprocess.log» никогда не создается и не записывается.

Но кроме этого я просто испытываю действительно странное поведение. Как иногда, когда я запускаю его, он извергает бесконечный поток вывода, показывая процессы, запускающиеся и завершающиеся один за другим. Иногда он регистрирует файлы после того, как я их переименовал. Я не могу понять, почему он ведет себя так странно.

Бог 0.13.7 / ruby ​​2.3.0 / OSX 10.13.6

1 Ответ

0 голосов
/ 01 ноября 2018

Проверьте пример в документации, на которую вы снова ссылались:

God.watch do |w|
  w.name = "simple"
  w.start = "ruby /full/path/to/simple.rb"
  w.keepalive
end

Вы используете относительный путь, а не полный путь. Если вы попытаетесь использовать относительный путь, он выдаст ошибку и скажет, что не может создать файл журнала там. Это заставит его проходить через старт / выход, как вы описали.

Кроме того, убедитесь, что после CTRL-C процесса god вы уничтожили фоновый ruby процесс. Вы можете видеть, что даже после убийства god он работает с ps aux | grep ruby.

Наконец, puts делает запись в файл журнала, но вывод буферизуется god до тех пор, пока процесс ruby для simple.rb не будет завершен. Повторите этот процесс для подтверждения:

# Confirm no running ruby processes, otherwise kill the processes and re-verify
ps aux | grep ruby
# Start the daemon
god -c simple.god -D

Переключитесь на новую оболочку и запустите:

ps aux | grep ruby
  foo           51279   0.0  0.1  4322084  11888   ??  Ss   12:46AM   0:00.09 ruby /Users/foo/simple.rb
  foo           51241   0.0  0.2  4343944  26208 s000  S+   12:46AM   0:00.45 ruby /Users/foo/.rvm/gems/ruby-2.6.0-preview2/bin/god -c simple.god -D
# Kill the process for simple.rb, which causes god to dump the output to the log and restart it
kill 51279
# Verify log file contains expected output
cat myprocess.log
Hello
Hello
Hello
Hello

Я рекомендую вам продолжить чтение документации для god. Там много всего, и ответы на них есть.

...