Fork me on GitHub

The WebDevil

Enjoy development

Вчера потратил немного времени и произвел скрипт-демон для отлова изменений в указанной папке.
Но вот работает связка только с FAM. А в Linux сейчас уже используется более продвинутый Gamin. Как подружить Ruby с Gamin?

Собссно, сам демон:

#!/usr/bin/ruby

# load the fam bindings
require 'fam'

require 'logger'
require 'rubygems'
require 'daemons'

my_path = Dir.pwd
monitored_path = Dir.pwd + '/monitored/'
Daemons.daemonize
#Daemons.daemonize :ontop => true # For debugging purposes. Doesn't detach.

logger = Logger.new my_path + '/dirmon.log'
logger.level = Logger::INFO

unless test ?d, monitored_path
  log_file.write 'ERROR: Specified directory does not exist.'
  exit 1
end
pid = File.new(my_path + '/dirmon.pid',"w")
pid.write Process.pid
pid.close

Dir.chdir(my_path)

# open a connection to FAM and start monitoring specified path
fam = Fam::Connection.new
fam.monitor_dir monitored_path
logger.info "Fam connected"

while true
  # if there are fam events pending, then process them
  if fam.pending?
    ev = fam.next_event
    case ev.code
      when Fam::Event::CHANGED
        logger.info 'File changed: ' + ev.file
      when Fam::Event::DELETED
        logger.info 'File deleted: ' + ev.file
      when Fam::Event::CREATED
        logger.info 'File created: ' + ev.file
    end
  end
end

One Response to “FAM and Gamin”

  1. ну.. документацию надо читать…
    As of version 0.2.0, FAM-Ruby can also be used with Gamin (www.gnome.org/~veillard/gamin/), a GNOME library that is compatible with a subset of FAM. An RDoc-generated API reference is available in doc/, and a brief description of each event code is available in event_codes.txt.
    Но опять же Gamin – это гномовская либа. А гнум я последнее время не люблю….

    DeViL

Leave a Reply