如何使用上帝捕获过程输出?
How to capture process output using God?
正在尝试让一个简单的 God 演示正常工作。
在一个空目录中,我根据 God 文档创建了以下文件:
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
再次检查您链接到的文档中的示例:
God.watch do |w|
w.name = "simple"
w.start = "ruby /full/path/to/simple.rb"
w.keepalive
end
您使用的是相对路径,而不是完整路径。如果您尝试使用相对路径,它会出错并说它无法在那里创建日志文件。这将导致它按照您的描述循环 start/exit。
此外,请确保在 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
切换到新的 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 演示正常工作。
在一个空目录中,我根据 God 文档创建了以下文件:
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
再次检查您链接到的文档中的示例:
God.watch do |w|
w.name = "simple"
w.start = "ruby /full/path/to/simple.rb"
w.keepalive
end
您使用的是相对路径,而不是完整路径。如果您尝试使用相对路径,它会出错并说它无法在那里创建日志文件。这将导致它按照您的描述循环 start/exit。
此外,请确保在 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
切换到新的 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
的文档。内容多多,答案应有尽有