[Koha-patches] [PATCH] Created database-tidying cron script

Galen Charlton gmcharlt at gmail.com
Sun Aug 2 17:29:06 CEST 2009


Pushed with thanks --gmc

On Sat, Aug 1, 2009 at 7:38 PM, J. David Bavousett<dbavousett at ptfs.com> wrote:
> This little script establishes a framework for database cleanup on some regular
> schedule.  Initial implementation provides for brute truncation of the sessions
> table, and selective-by-age cleanup of the zebraqueue.
> ---
>  misc/cronjobs/cleanup_database.pl |  106 +++++++++++++++++++++++++++++++++++++
>  misc/cronjobs/crontab.example     |    2 +
>  2 files changed, 108 insertions(+), 0 deletions(-)
>  create mode 100755 misc/cronjobs/cleanup_database.pl
>
> diff --git a/misc/cronjobs/cleanup_database.pl b/misc/cronjobs/cleanup_database.pl
> new file mode 100755
> index 0000000..830eac3
> --- /dev/null
> +++ b/misc/cronjobs/cleanup_database.pl
> @@ -0,0 +1,106 @@
> +#!/usr/bin/perl -w
> +
> +# Copyright 2009 PTFS, Inc.
> +#
> +# This file is part of Koha.
> +#
> +# Koha is free software; you can redistribute it and/or modify it under the
> +# terms of the GNU General Public License as published by the Free Software
> +# Foundation; either version 2 of the License, or (at your option) any later
> +# version.
> +#
> +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
> +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
> +# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License along with
> +# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
> +# Suite 330, Boston, MA  02111-1307 USA
> +
> +use strict;
> +use warnings;
> +
> +BEGIN {
> +
> +    # find Koha's Perl modules
> +    # test carefully before changing this
> +    use FindBin;
> +    eval { require "$FindBin::Bin/../kohalib.pl" };
> +}
> +
> +use C4::Context;
> +use C4::Dates;
> +#use C4::Debug;
> +#use C4::Letters;
> +#use File::Spec;
> +use Getopt::Long;
> +
> +sub usage {
> +    print STDERR <<USAGE;
> +Usage: $0 [-h|--help] [--sessions] [-v|--verbose] [--zebraqueue DAYS]
> +   -h --help         prints this help message, and exits, ignoring all other options
> +   --sessions        purge the sessions table.  If you use this while users are logged
> +                     into Koha, they will have to reconnect.
> +   -v --verbose      will cause the script to give you a bit more information about the run.
> +   --zebraqueue DAYS purge completed entries from the zebraqueue from more than DAYS days ago.
> +USAGE
> +    exit $_[0];
> +}
> +
> +my ($help, $sessions, $verbose, $zebraqueue_days);
> +
> +GetOptions(
> +    'h|help' => \$help,
> +    'sessions' => \$sessions,
> +    'v|verbose' => \$verbose,
> +    'zebraqueue:i' => \$zebraqueue_days,
> +) || usage(1);
> +
> +if ($help) {
> +    usage(0);
> +}
> +
> +if (!($sessions || $zebraqueue_days)){
> +    print "You did not specify any cleanup work for the script to do.\n\n";
> +    usage(1);
> +}
> +
> +my $dbh = C4::Context->dbh();
> +my $query;
> +my $sth;
> +my $sth2;
> +my $count;
> +
> +if ($sessions) {
> +    if ($verbose){
> +        print "Session purge triggered.\n";
> +        $sth = $dbh->prepare("SELECT COUNT(*) FROM sessions");
> +        $sth->execute() or die $dbh->errstr;
> +        my @count_arr = $sth->fetchrow_array;
> +        print "$count_arr[0] entries will be deleted.\n";
> +    }
> +    $sth = $dbh->prepare("TRUNCATE sessions");
> +    $sth->execute() or die $dbh->errstr;;
> +    if ($verbose){
> +        print "Done with session purge.\n";
> +    }
> +}
> +
> +if ($zebraqueue_days){
> +    $count = 0;
> +    if ($verbose){
> +        print "Zebraqueue purge triggered for $zebraqueue_days days.\n";
> +    }
> +    $sth = $dbh->prepare("SELECT id,biblio_auth_number,server,time FROM zebraqueue
> +                          WHERE done=1 and time < date_sub(curdate(), interval ? day)");
> +    $sth->execute($zebraqueue_days) or die $dbh->errstr;
> +    $sth2 = $dbh->prepare("DELETE FROM zebraqueue WHERE id=?");
> +    while (my $record = $sth->fetchrow_hashref){
> +        $sth2->execute($record->{id}) or die $dbh->errstr;
> +        $count++;
> +    }
> +    if ($verbose){
> +        print "$count records were deleted.\nDone with zebraqueue purge.\n";
> +    }
> +}
> +exit(0);
> diff --git a/misc/cronjobs/crontab.example b/misc/cronjobs/crontab.example
> index 9cd7ca3..bdb58f7 100644
> --- a/misc/cronjobs/crontab.example
> +++ b/misc/cronjobs/crontab.example
> @@ -75,3 +75,5 @@ KOHA_CRON_PATH = /home/liblime/kohaclone/misc/cronjobs
>  # Obviously, one needs logrotate(8) to do this
>  # 20 1 * * *  /usr/sbin/logrotate -s /home/liblime/kohaclone/var/run/zebradb/logstatus /home/liblime/kohaclone/etc/logrotate.conf
>
> +# clean up databases nightly.  Be sure not to run this with --sessions during a time when the system is in use!
> +16 1 * * * $KOHA_CRON_PATH/cleanup_database.pl --sessions --zebraqueue 10
> --
> 1.5.6.5
>
> _______________________________________________
> Koha-patches mailing list
> Koha-patches at lists.koha.org
> http://lists.koha.org/mailman/listinfo/koha-patches
>



-- 
Galen Charlton
gmcharlt at gmail.com



More information about the Koha-patches mailing list