2014-02-05 81 views
1

我正在嘗試在網頁上打印進程狀態。但是當執行host:port/status方法我沒有看到任何迴應。它返回一個空白頁面。 ps -ef命令在命令行上執行。我試圖在getStatus方法上打印它,但它不打印它。Sinatra在網頁上打印字符串

我想在網站上顯示流程執行狀態。

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 

回答

2

表達

puts #{… 

將僅打印一個新行字符,因爲#字符串外面引入了評論,用相同return #…

獲得實際的輸出,使用這樣的(我走上轉化你的代碼片段更地道的紅寶石自由):

def running? 
    `ps -ef` =~ /abc\.jar/ 
end 

get '/status' do 
    status = running? ? 'Running' : 'Stopped' 
    logger.debug "Status: #{status}" 
    status 
end 

現在running?方法執行你的檢查:

  1. 得到結果ps -ef通過Kernel#`
  2. 匹配結果反對th通過String#=~ëregular expression/abc\.jar/(基本上在紅寶石土地執行grep abc\.jar

步驟1在副殼進行,一切在副殼返回到紅寶石土地,而Kernel#system將只返回命令是否與退出非零退出狀態。從system('...')開始的任何命令輸出也會重定向到標準輸出您的inital代碼段不會以這種方式工作,因爲grep -v grep將始終以狀態0退出。

(技術上,一個子殼不是必需的,但IO.popen通話更加複雜)

+0

謝謝你。我可以在網頁上看到它的打印價值。你能解釋一下關於ps -ef的運行方法。它如何評估它。我是新來的紅寶石..對不起,問簡單Q. –

+0

我已經擴大了我的答案上面。我強烈建議閱讀鏈接的文檔。 – DMKE

+0

感謝一噸。你也給了我很多有價值的鏈接。欣賞它。 –