Вчера потратил немного времени и произвел скрипт-демон для отлова изменений в указанной папке.
Но вот работает связка только с 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
# 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
ну.. документацию надо читать…
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
April 5th, 2008