Ruby 如何使用God捕获流程输出?
试图让一个简单的演示工作 在一个空目录中,我根据God文档创建了以下文件: simple.rb: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
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,好多了!