[sf-perl] Running a perl script as a service
Daniel Lo
woof at danlo.com
Fri Jan 11 12:20:07 PST 2008
Hello Richard,
Where is mailprocessor.pl?
-daniel
Friday, January 11, 2008, 7:39:27 AM, you wrote:
> I have a script below (at the bottom ) that reads incoming data from serial
> port and formats it. The program works fine when I execute it from a
> console. However, in order to keep it up at all times I created an
> /etc/init.d script that executes it:
> #! /bin/sh
> # Basic support for *nix style chkconfig
> ###
> # chkconfig: 235 98 55
> # description: Manages the services you are controlling with the chkconfig
> command
> ###
> PERL=/usr/bin/perl
> SRL_READER=/usr/src/maillaundpad/serial_reader_test.pl
> case "$1" in
> start)
> echo -n "Starting new-service"
> $PERL $SRL_READER daemon
> echo "."
> ;;
> stop)
> echo -n "Stopping new-service"
> $PERL $SRL_READER -k
> echo "."
> ;;
> *)
> echo "Usage: /sbin/service srlreader {start|stop}"
> exit 1
> esac
> When I run via the /init.d/script it crashes when it has to call another
> perl script with the following output:
> /sbin/service srlreader start
> Starting new-serviceINCOMING FILE BEING RECEIVED
> Closing File
> Can't locate mail_processor.pl in @INC (@INC contains:
> /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi
> /usr/lib/perl5/site_perl/5.8.7/i386-linux-thread-multi
> /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi
> /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi
> /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7
> /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5
> /usr/lib/perl5/site_perl
> /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi
> /usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi
> /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi
> /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi
> /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7
> /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5
> /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi
> /usr/lib/perl5/5.8.8 .) at /usr/src/maillaundpad/serial_reader_test.pl line
> 71, <DEV> line 24.
> .
> Any ideas as to what I'm doing wrong? Thanks for any help.
> ######### script ########################
> #!/usr/bin/perl -w
> # serial_reader_test.pl
> #test this program w/out serial drives
> use strict;
> use Device::SerialPort;
> my $LOGDIR = "/home/richard/test"; # path to data file
> my $LOGFILE = "serial_data.log"; # file name to output to
> #my $PORT = "/dev/ttyD015"; # port to watch
> my $PORT = "/dev/ttyS0"; # port to watch
> #
> # Serial Settings
> #
> my $ob = Device::SerialPort->new ($PORT) || die "Can't Open $PORT: $!";
> #
> # open the logfile, and Port
> #
open(LOG,">>>${LOGDIR}/${LOGFILE}")
> ||die "can't open smdr file $LOGDIR/$LOGFILE for append: $!\n";
> open(DEV, "<$PORT") || die "Cannot open $PORT: $_";
> #open(DEV, "<test_FILEEEEEE"); # if you want to test the prog. from a file
> #select(LOG), $| = 1; # set nonbufferd mode
> #
> # Loop forver, logging data to the log file
> #
> my $write_file; # y or no write data to file
> my $mail_count = 0; # the number of mails received in the session
> my $filename; # what the new file will be called
> while($_ = <DEV>) { # print input device to file
> # get a nice date string for naming an email file
> my ($yr, $mo, $day, $hr, $min, $sec) = (localtime)[5,4,3,2,1,0];
> my $date = $sec . $min . $hr . $day . ($mo + 1) . ($yr + 1900);
> #print $_; # print to console (for now)
> print LOG $_; # print to log file
> if ($_ =~ /#######/) {
> #this is the begining of an email file
> print "INCOMING FILE BEING RECEIVED\n";
> $mail_count++;
> $write_file = "y";
> $filename = $mail_count . "EMAIL" . $date;
> open(EMAIL_FILE, ">$filename") || die "CANT OPEN EMAIL_FILE: $!\n";
> }
> if ($write_file eq "y") {
> print EMAIL_FILE $_;
> } #end of if
> if ($_ =~ /!!!!!!!/) {
> print "Closing File\n";
> close (EMAIL_FILE) || die "CAN'T CLOSE EMAIL_FILE: $!";
> $write_file = "n";
> require "mail_processor.pl";
> process($filename);
> rename "$filename", "sent/$filename";
> } #end of if
> } # end of while
> undef $ob;
> ### end
--
Best regards,
Daniel mailto:woof at danlo.com
More information about the SanFrancisco-pm
mailing list