It has recently become clear that a script which calls rtx-shredder never 
finishes.  It seems that shredder is actually hanging on something but I can't 
figure out what.  Script follows.

#!/usr/bin/perl

#############################################
# File:     delete_spam.pl
# Version:  2.1.2
# Author:   Mathew Snyder
# Date:     August 5, 2007
# Comments: A script to gather up the spam
#           sent to the Security queue and
#           eliminate the "users" that
#           created it.  It then marks those
#           tickets as deleted for the purpose
#           of further housecleaning by the
#           rtx-shredder cronjob.
#############################################

#Set up our environment
use warnings;
use strict;
use lib '/usr/local/rt3/lib';
use lib '/usr/local/rt3/local/lib';
use lib '/usr/local/lib';
use RT;
use RT::Users;
use RT::Tickets;
use MIME::Lite;
use Reports::Emails;

RT::LoadConfig();
RT::Init();

my @usrID;
my %userID;
my @emails;
my %spammers;

my $users = new RT::Users(RT::SystemUser);
$users->LimitToPrivileged;

while ( my $user = $users->Next ) {
        next if $user->Name eq 'root';
        $skipEmails{$user->EmailAddress} = undef;
}

my $tix = new RT::Tickets(RT::SystemUser);
$tix->FromSQL('Queue = "zSPAM"');

while (my $ticket = $tix->Next) {
        if ($ticket->RequestorAddresses =~ /^msnyd...@xxxxxx.com$/ || 
$ticket->RequestorAddresses =~ /^securi...@xxxxxx.com$/) {
                $ticket->DeleteWatcher (
                        Type  => 'Requestor',
                        Email => $ticket->RequestorAddresses
                );
#               $ticket->AddWatcher (
#                       Type  => 'Requestor',
#                       Email => 'spam...@spammer.com'
#               );
        }
        next if (exists($skipEmails{$ticket->RequestorAddresses}));
        $spammers{$ticket->RequestorAddresses} = undef;
#       push @emails, $ticket->RequestorAddresses;
        $ticket->SetStatus("deleted");
}

my $count = 0;
#foreach my $email (@emails) {
foreach my $email (keys %spammers) {
        
system("/usr/local/rt3/local/sbin/rtx-shredder","--force","--plugin","Users=status,any;email,$email;replace_relations,zbeeblebrox;no_tickets,true");
        $count++;
}

system("/usr/local/rt3/local/sbin/rtx-shredder --force --plugin 
'Tickets=status,deleted;queue,zSPAM;limit,1000' && rm -f /root/*.sql)";

my $emailTo      = 'msny...@xxxxxxx.com';
my $emailFrom    = "RT";
my $emailSubj    = "RT Spam Removal";
my $emailMsg     = "The spam removal script has completed and has removed 
$count spam created users";

my $fullEmail    = new MIME::Lite(From    => $emailFrom,
                                  To      => $emailTo,
                                  Subject => $emailSubj,
                                  Data    => $emailMsg,
);

$fullEmail->send("sendmail", "/usr/sbin/sendmail -t");

unlink glob "*.sql";

exit;


There are likely some changes which I won't be able to explain since they were 
made after I left the company.  Admittedly, this is a poorly documented script 
which has left me scratching my own head wondering why I did things.  Hopefully 
that won't stop anyone from helping.

One thing that has been noticed is that there are two calls to rtx-shredder for 
each instance of the script.  You'll see that one is a system call (sh -c) and 
the other is a via perl (I'm guessing from the script itself)
Here is the ps output:
10013 pts/1 S 0:00 /usr/bin/perl /usr/local/sbin/delete_spam.pl
10014 pts/1 S 0:00 sh -c /usr/local/rt3/local/sbin/rtx-shredder
--force --plugin 'Tickets=status,deleted;queue,zSPAM;limit,500' && rm -f
/root/*.sql
10015 pts/1 S 0:31 /usr/bin/perl
/usr/local/rt3/local/sbin/rtx-shredder --force --plugin
Tickets=status,deleted;queue,zSPAM;limit,500

In this output, I found that by killing process 10015 the other two terminated 
instantly.  I'm guessing that when the system call is made perl is invoked 
again by way of rtx-shredder and 10015 reflect all the arguments passed.  
However, it never exits giving control back to the system call which would 
then, in turn, terminate giving control back to the script.

I haven't seen any particular errors but then, I don't know what they would 
look like.  Anyone else run into a similar problem?

-Mathew
-- 
Keep up with my goings on at http://feeds.feedburner.com/theillien_atom
_______________________________________________
http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users

Community help: http://wiki.bestpractical.com
Commercial support: sa...@bestpractical.com


Discover RT's hidden secrets with RT Essentials from O'Reilly Media. 
Buy a copy at http://rtbook.bestpractical.com

Reply via email to