def self.reopen_logs
to_reopen = []
nr = 0
ObjectSpace.each_object(File) { |fp| is_log?(fp) and to_reopen << fp }
to_reopen.each do |fp|
orig_st = begin
fp.stat
rescue IOError, Errno::EBADF
next
end
begin
b = File.stat(fp.path)
next if orig_st.ino == b.ino && orig_st.dev == b.dev
rescue Errno::ENOENT
end
begin
File.open(fp.path, 'a') { |tmpfp| fp.reopen(tmpfp) }
fp.sync = true
new_st = fp.stat
if orig_st.uid != new_st.uid || orig_st.gid != new_st.gid
fp.chown(orig_st.uid, orig_st.gid)
end
nr += 1
rescue IOError, Errno::EBADF
end
end
nr
end