Драгоценный камень рубиновых демонов

Я установил демонов ruby ​​gem. Чтобы убедиться, что это работает, я создал скрипт, который будет печатать в файл каждые 5 секунд. Затем я создал еще один файл для запуска сценария, используя тривиальный пример, приведенный в файле readme, расположенном по адресу http://daemons.rubyforge.org/ . Мне нужны и рубигемы, и демоны. Затем я набираю «ruby mycontrol.rb start». В примере, который они используют, есть какое-то сообщение о том, что «(myserver.rb теперь работает в фоновом режиме)», я этого не вижу, но я не получаю никаких ошибок. Если я сделаю «ps -u myusername», я увижу, что файл, который нужно демонизировать, указан в процессах, но, похоже, не работает, поскольку в файл ничего не записывается.

Вот мой источник:

# this is mycontrol.rb

require 'rubygems'
require 'daemons'

Daemons.run(daemon.rb)

а также...

# this is daemon.rb

loop do 
 open('file.out', 'w') do |f|
  f.puts 'hello everybody'
 end
 sleep(3)
end

Что-то из того, что я делаю, кажется вам неправильным?

Спасибо, Тони


person tonywok    schedule 18.11.2009    source источник
comment
Пожалуйста, не могли бы вы переформатировать свой код (с отступом в 4 пробела), чтобы сделать его более читабельным?   -  person Phil Ross    schedule 19.11.2009


Ответы (1)


Я пробовал ваш пример, и он у меня работает (Ruby 1.8.6 в Linux с Daemons версии 1.0.10). Однако вы можете столкнуться со следующими проблемами:

  • Я обнаружил, что демонизированный процесс (daemon.rb) запускается с текущим рабочим каталогом /. Это не был текущий каталог при запуске mycontrol.rb или каталог, содержащий daemon.rb. Запуск от имени пользователя без полномочий root означал, что у моего процесса не было разрешения на запись файла. Я изменил имя файла на /tmp/file.out, и файл был создан с ожидаемым содержимым.

  • Вы открываете file.out в режиме только для записи ('w'). Это означает, что он будет усекаться и перезаписываться каждые 3 секунды. Если вы откроете файл в режиме добавления ('a'), вы увидите дополнительную hello everybody строку, записываемую в файл каждые 3 секунды.

Я также не вижу сообщений «сейчас работает в фоновом режиме». Я предполагаю, что это включено в документацию для иллюстрации того, что должно было произойти, а не для указания результата.

person Phil Ross    schedule 18.11.2009