March 2005
Now the earlier Perl Daemon script picks up a few options, arguments and a simple usage message.
The three options that made the most sense to add were:
The interval and logfile still have defaults. The default for
the interval is 300 seconds (or once every five minutes) and the
logfile in /tmp/mntchk.log.
In addition to options with arguments, a version check and usage option added for posterity.
First there are the additions of the program name and version number:
my $PROGRAM = "mntchkd"; my $VERSION = "0.4";
Then, in addition to the new variables a forloop/parsing ladder in perl to figure out what to do with the input:
# Input validation bits
if ((@ARGV <= 0) || (@ARGV >= 7)) {
print "syntax error\n";
usage();
exit 1;
}
# Check for usage message first
if ($ARGV[0] eq "usage") {
usage();
exit 0;
}
for (my $i = 0; $i < @ARGV; $i++) {
if ($ARGV[$i] =~ /^-version|-V$/) {
print "$PROGRAM version $VERSION\n";
exit 1;
} elsif ($ARGV[$i] eq '-usage') {
usage();
exit 0;
} elsif ($ARGV[$i] eq '-m') {
$MNT = $ARGV[++$i];
} elsif ($ARGV[$i] eq '-l') {
$LOG = $ARGV[++$i];
} elsif ($ARGV[$i] eq '-d') {
$DELAY = $ARGV[++$i];
} else {
usage();
exit 1;
}
}
The code above is pretty simple, the version and usage are
checked for first because they invoke an exit. Note
that the version did not even require a function.
Next, it is a matter of using the next argument from the input and pre incrementing the loop counter. The options are pretty self explanatory, as each option is chosen the value is assigned. Note that in this version, the mountpoint is a required argument.
The rest of the program actually stays the same as the first
version, the only change is the addition of an usage()
function:
sub usage {
print "$PROGRAM [option argument][option argument]...\n";
print "$PROGRAM [-d delay][-m mountpoint][-l logfile]\n";
print "Options:\n";
print " -d delay Set check delaytime in seconds to delay\n";
print " -m directory Set mountpount to directory\n";
print " -l logfile Send log messages to logfile\n";
}
The entire mount check perl daemon can be downloaded from
here. Note that there
is still some room for improvement in this one. A better parsing
loop perhaps, a check to make sure $MNT is specified
and others to be sure.
The door for a more generic daemon are left open, however. For all intents, the entire daemonizing process and logging could be written so all the main daemon program does is wait for a 1 or 0 from some check that passes back a message.
Food for thought . .
Next: C Daemon I Previous: Perl Daemon I