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