试图获得一个简单的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 /红宝石2.3.0 / OSX 10.13.6
答案 0 :(得分:1)
检查您再次链接到的文档中的示例:
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
的{{1}}进程终止。重复此过程以确认:
simple.rb
切换到新的shell并运行:
# 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
的文档。有很多东西,而且答案都在那里。