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]

Reply via email to