Ruby 如何使用God捕获流程输出?

Ruby 如何使用God捕获流程输出?,ruby,god,Ruby,God,试图让一个简单的演示工作 在一个空目录中,我根据God文档创建了以下文件: simple.rb: loop do puts 'Hello' sleep 1 end God.watch do |w| w.name = "simple" w.start = "ruby simple.rb" w.log = 'myprocess.log' w.keepalive end simple.rb: loop do puts 'Hello' sleep 1 end God

试图让一个简单的演示工作

在一个空目录中,我根据God文档创建了以下文件:

simple.rb:

loop do
  puts 'Hello'
  sleep 1
end
God.watch do |w|
  w.name = "simple"
  w.start = "ruby simple.rb"
  w.log = 'myprocess.log'
  w.keepalive
end
simple.rb:

loop do
  puts 'Hello'
  sleep 1
end
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”文件从未被创建或写入

但除此之外,我只是经历了一些非常奇怪的行为。就像有时我运行它时,它会输出源源不断的输出,显示进程一个接一个地启动和退出。有时它会在我重命名文件后记录到文件中。我搞不懂它为什么这么不稳定


God 0.13.7/ruby 2.3.0/OSX 10.13.6

再次检查您链接到的文档中的示例:

God.watch do |w|
  w.name = "simple"
  w.start = "ruby /full/path/to/simple.rb"
  w.keepalive
end
您使用的是相对路径,而不是完整路径。如果您尝试使用相对路径,它将出错并说它无法在那里创建日志文件。这将导致它按照您所描述的那样循环启动/退出

另外,确保在
CTRL-C
完成
god
进程后,您会杀死您的后台
ruby
进程。您可以看到,即使杀死了
上帝
,它仍然在运行
ps aux | grep ruby

最后,
记录到日志文件中,但输出被
上帝
缓冲,直到
simple.rb的
ruby
进程终止。重复此过程以确认:

# Confirm no running ruby processes, otherwise kill the processes and re-verify
ps aux | grep ruby
# Start the daemon
god -c simple.god -D
切换到新的shell并运行:

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
的文档。有很多,答案都在那里。

谢谢,这是有道理的。但是,在杀死所有进程并运行
god-c simple.god-D
之后,即使没有进程留下,我也会收到套接字“地址已在使用”错误。快把我逼疯了。我会把这个算作答案,不过我从来没有让它工作过。上帝太奇怪了。结果变成了PM2,好多了!