2016-10-03 4 views
-5

我无法获得linux当前用户,内存,硬盘使用情况,cpu加载到ruby。我需要抓取linux shell {command}进入ruby

require 'socket' 
puts "\n" 

time = Time.new 
#puts time.day, time.month, time.year 
puts "Date " + time.strftime("%d/%m/%Y")+"\t\t\tTime " + time.strftime("%H:%M:%S")+"\t\t\tSystem-Name: " + Socket.gethostname 
puts "----------------------------------------------------------------------------------------------" 
puts "Uptime: " 

#Uptime 
uptime = exec "uptime" 

#Memory Usage 

system (free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }') 

#Disk usage 
df -h | awk '$NF=="/"{printf "Disk Usage: %d/%dGB (%s)\n", $3,$2,$5}' 

#Current Users 
users | awk '{for(i=1;i<=NF;i++) {a[$i]++}} END {for(i in a) {print "Current Users:\t"a[i]}}' 

#CPU load 
top -bn1 | grep load | awk '{printf "CPU Load: %.2f\n", $(NF-2)}' 
+1

请在未来更好地设置您的问题的格式。 – Amadan

回答

1

抓住从外部命令的输出和错误,你不能使用EXEC系统,但必须这样做,是这样的:

output = `command` 
2

使用反引号

`command` 

而不是execsystem

您可能想要阅读this answer了解运行系统命令的不同方式及其差异。

+0

这不是工作? \'(free -m | awk'NR == 2 {printf“Memory Usage:%s /%sMB(%.2f %%)\ n”,$ 3,$ 2,$ 3 * 100/$ 2}')\'不是周围反引号。你会得到什么错误? – spickermann

+0

*你的意思是不工作*?是否有错误讯息?返回的东西是不是符合你的期望? – spickermann

+0

它会返回什么?如果你不回答我的问题,我将无法帮助你... – spickermann

0

第一:选项应该更好,因为它返回字符串格式。

第二:选项很好,因为某些原因,如清除日志。

1) uptime = `uptime` 
#OR 
2) system("clear") 
+1

? –

+0

@YeurionmuveeWatcher http://stackoverflow.com/questions/7220896/get-current-ruby-process-memory-usage and http://www.be9.io/2015/09/21/memory-leak/ – 7urkm3n