Рубиновый Камень Демонов - PullRequest
1 голос
/ 18 ноября 2009

Я установил демоны рубинового камня. Чтобы убедиться, что он работает, я создал скрипт, который будет печатать в файл каждые 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

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

Спасибо, Tony

1 Ответ

4 голосов
/ 19 ноября 2009

Я попробовал ваш пример, и он работает для меня (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 секунды.

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

...