我正在尝试在网页上打印流程状态。但是当执行host:port/status
方法时,我没有看到任何响应。它返回一个空白页面。 ps -ef命令在命令行上执行。我尝试在getStatus方法上打印它,但它不打印它。
我想在网站上显示流程执行状态。
def getStatus
puts #{system('ps -ef | grep abc.jar|grep -v grep')? "Running": "Stopped"}
return #{system('ps -ef | grep abc.jar|grep -v grep')? "Running": "Stopped"}
end
get '/status' do
return getStatus
end
答案 0 :(得分:2)
表达式
puts #{…
只会打印换行符,因为字符串外的#
会引入注释,与return #…
相同。
要获得实际输出,请使用类似的东西(我可以自由地将您的代码片段转换为更惯用的Ruby):
def running?
`ps -ef` =~ /abc\.jar/
end
get '/status' do
status = running? ? 'Running' : 'Stopped'
logger.debug "Status: #{status}"
status
end
现在running?
方法执行检查:
ps -ef
的结果
/abc\.jar/
进行匹配(基本上在Ruby土地上执行grep abc\.jar
)步骤1在子shell中执行,子shell中的所有内容都返回到Ruby域,而Kernel#system只返回命令是否以非零退出状态退出。从system('...')
开始的命令的任何输出也会重定向到标准输出。您的初始代码段不会以这种方式工作,因为grep -v grep
将始终以状态0
退出。
(从技术上讲,不需要子shell,但IO.popen调用更复杂)