2013-07-26 2 views
-2

Я не буду писать сценарий в Ruby на сервере Linux. Мне нужна статистика с сервера, и я новичок в Ruby.Команды Linux в Ruby

У меня проблема с командами Linux, потому что если я использую exec для использования команды Linux, моя программа упадет без ошибок.

disks = ["sda", "sdb"] 

Код:

disks.each do |disk| 
    puts "disk test start" 
    exec "smartctl -a /dev/#{disk} > /tmp/sestavy/#{disk}" 
    puts "disk test end" 
end 

Выход:

[[email protected] sestavy]# ruby test.rb 
disk test start 
[[email protected] sestavy]# 

Благодаря Хонза

+0

Возможно, вы хотите 'system()' вместо 'exec()'. –

ответ

1

Это именно то, что exec делает: он заменяет текущую запущенную программу новой. Это не относится к Ruby, оно работает одинаково в оболочке, на C, практически в любой другой среде.

+0

Как обычно, вы можете здесь привести здесь более подробные объяснения? всегда ищут что-то новое от вас .. :) –

+1

@Priti это ожидание для группы системных вызовов exec из unix. Проверьте [execve] (http://linux.die.net/man/2/execve) и [fork-exec] (http://en.wikipedia.org/wiki/Fork-exec) – fotanus

+1

@fotanus Спасибо за ваш Берегись.. :) –

1

При использовании exec, он заменяет текущий процесс с тем, что вы хотите выполнить. Поэтому он не вернется к вашему скрипту Ruby. См. this explanation для различных методов выполнения оболочки.

+0

Большое спасибо – Chochole

Смежные вопросы