Hello, I should add that in the below script MAKEPORT is another script that I have performing once there is a change in the directory. > > From: <[EMAIL PROTECTED]> > Date: 2003/06/26 Thu PM 05:20:51 EDT > To: [EMAIL PROTECTED], [EMAIL PROTECTED] > Subject: Re: Re: Hmm....is a hot directory possible? > > I keep forgetting to post the hold group. Hopes this helps. > > #!/usr/bin/perl -w > > use strict; > use POSIX qw(setsid); > > # set costants > my$MAKEPORT="/home/jspencer/bin/make-port"; > > > # daemonize the program > &daemonize; > > while(1) { > # set costants > [EMAIL PROTECTED]("/home/jspencer/acucorp/std/std-unix-misc.tar.gz") ; > my$FIRSTTIME = "$FILETIME[9]"; > my$SECTIME=scalar time; > > sleep(2); > > if (($FIRSTTIME + 2) > $SECTIME) { > system($MAKEPORT); > }} > > sub daemonize { > > my $outlog = '/home/jspencer/bin/daemons/logs/hotfolder_out.log'; > my $errorlog = '/home/jspencer/bin/daemons/logs/hotfolder_error.log'; > > > chdir '/' or die "Can't chdir to /: $!"; > umask 0; > open STDIN, '/dev/null' or die "Can't read /dev/null: $!"; > open STDOUT, ">$outlog" or die "Can't write to /dev/null: $!"; > open STDERR, ">$errorlog" or die "Can't write to /dev/null: $!"; > defined(my $pid = fork) or die "Can't fork: $!"; > exit if $pid; > setsid or die "Can't start a new session: $!"; > } > > > > From: david <[EMAIL PROTECTED]> > > Date: 2003/06/26 Thu PM 04:16:49 EDT > > To: [EMAIL PROTECTED] > > Subject: Re: Hmm....is a hot directory possible? > > > > Chris Zimmerman wrote: > > > > > -----BEGIN PGP SIGNED MESSAGE----- > > > Hash: SHA1 > > > > > > Is there some way that I can write a bit of code that will watch a > > > directory and as soon as a file is written to that directory, something is > > > run against > > > that file? What would be the best way to turn this into a daemon? > > > > > > > you could take a look at the stat function provided by Perl to see if the > > directory's last modified time or inode change time changed: > > > > #!/usr/bin/perl -w > > use strict; > > > > my($pmm,$pic); > > > > while(1){ > > > > my($mm,$ic) = (stat('/tmp'))[9,10]; > > > > if($pmm and $pic and $pmm != $mm || $pic != $ic){ > > print "some change to /tmp\n"; > > }else{ > > print ".\n"; > > } > > > > $pmm=$mm; > > $pic=$ic; > > > > sleep(7); > > } > > > > __END__ > > > > 1. this is not a daemon. > > 2. this only reports there are some changes (it could be adding a file or > > deleting a file,etc) in /tmp but you don't know what really happened there. > > 3. this only reports changes to /tmp not knowing any change below the /tmp > > level. for example: > > > > #-- > > #-- the scrpipt report the following 3 changes to /tmp > > #-- > > mkdir /tmp/another > > touch /tmp/hi > > rm -f /tmp/hi > > > > #-- > > #-- but doesn't know the following 3 changes > > #-- > > mkdir /tmp/another/yet > > touch /tmp/another/yet/file > > rm -fr /tmp/another/yet > > > > because there is really no change to /tmp, only its child directory. > > > > solution to #2 and #3 can do done with a different approch. something like > > the following might work: > > > > 1. recursively cache (in a hash) all sub directories and files under /tmp > > during start up of your daemon. > > 2. once a while, do the same resursive scan for the /tmp directory and > > compare the directory content with the hash you cached a while ago. > > 3. if there is any differences, you know something has changed and because > > you have 2 hashs, you can easily find out what really happened. for > > example, if the first hash has an entry where the second hash doesn't, you > > know something has been deleted from the directory. Or if the second hash > > has something that's missing from the first hash, you know there are new > > files. > > 4. update the cache to be the most recent scan. repeat step #2. > > > > File::Find module can help you do the recursive scan portion fairly easily. > > you can take the same approach but instead of caching the directory > > contents, you can cache each sub directory's last modified time instead. > > this will reduce the size of your hash a bit. either way, even this > > approach has many drawback: > > > > 1. if you target directory is huge, the scaning part will take a long time > > which brings us to the 2 drawback. > > 2. race condition. it's totally possible for a file to appear and disappear > > during your directory scan especially if the scan takes a long time or the > > directory is "busy" (means there are tons of activity in the directory so > > files appear and disappear really fast). your scan will miss those. > > > > you might need to apply some kind of locking to the directory during the > > scan. finally, take a look in CPAN to see if something comes up. on top of > > my head, i don't remember any modules that does what you want. good luck. > > > > david > > > > -- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > -- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > >
-- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]