[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