Okay, I stripped it down to 2 subroutines. Maybe easier to troubleshoot?
The below sends 4 email messages.
If I skip &bakkup; by commenting out, it sends 1 message as expected.
WHY? What's in &bakkup that is interfering with other actions?
Jo
#!/usr/bin/perl -Tw
use strict;
$ENV{'PATH'} = '/bin:/usr/bin';
delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
my $petFile="/home/devsite/.pets.txt";
my $backupStatus;
use Date::Manip;
my $todayUTS=&UnixDate('today',"%s");
&bakkup;
die unless (
&sendEmail('[email protected]','[email protected]','Welcome','','hel
lo'));
exit;
sub bakkup {
my $archive ="/home/devsite/bakTEST/$todayUTS.tar.gz";
my @filesToBackup = ("$petFile");
my $failed;
my $failed2;
$backupStatus.="Failed to begin backup $! \n" unless defined(my
$pid=open(KIDDO, "-|" ));
if ($pid) {
while (<KIDDO>) { }
close KIDDO;
} else {
system
("/bin/tar","-czf",$archive,@filesToBackup)==0 or $backupStatus.="Failed
system call\n";
my $failed=$?>>8; #n.b. $_ and $! not useful here
}
if ($failed) { $backupStatus.="Failed to backup [tar (pid:$pid)
exited with: $failed ($?)]\n"; }
else {
$backupStatus.="Failed to begin reading $! \n"
unless defined(my $test=open(KID,"-|"));
if ($test) {
while (<KID>) { }
close KID;
} else {
system
("/bin/tar","-tzf",$archive)==0 or $backupStatus.="Failed system call\n";
my $failed2=$?>>8;
}
if ($failed2) { $backupStatus.="Failed to test
backup:tar(pid:$test)exited with:[$failed2]($?)"; }
else { $backupStatus.="Successfully backed
up files"; }
}
}
sub sendEmail {
my ($efrom, $eto, $esub, $ehdr, $ebody) = @_;
open (MAIL, "|/usr/lib/sendmail -t -i");
print MAIL <<EOF;
From: $efrom
To: $eto
Subject: $esub
$ehdr
$ebody
EOF
close (MAIL);
return 1;
}
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/