pg_dump & rotate script
5分で作った。動いた。わーい。
#!/usr/bin/perl use strict; use FindBin; use File::Spec; use Data::Dumper; use DateTime; use Getopt::Long; my $dir = '/tmp'; my $keep_count = 5; my $database = 'foo'; my $pg_user = 'foo'; my $pg_password = ''; my $host = 'localhost'; my $result = GetOptions( "dir=s" => \$dir, "keep_count=i" => \$keep_count, "database=s" => \$database, "host=s" => \$host, "pg_user=s" => \$pg_user, "pg_password=s" => \$pg_password, ); # 多分これでOK。今パスワード使ってないので、テストしてない。 $ENV{PG_PASSWORD} = $pg_password; my $dt = DateTime->now( time_zone => 'local' ); my $file = File::Spec->catfile( $dir , $database . '_' . $dt->ymd() . '_' . $dt->hms . '.dump'); # ダンプする `pg_dump -Fc -f $file $database -h $host -U $pg_user`; # 古い順 my @files = `ls -h $dir | grep '.dump\$'`; # 改行取る for(@files){ chomp; } if( scalar @files > $keep_count ) { unlink File::Spec->catfile( $dir , $files[0] ); } 1; =head1 NAME pg_dump.pl - pg_dumpスクリプト =head1 DESCRIPTION ダンプとローテションをします。これをローテーションというかは、微妙ですが。 =head1 SYNOPSYS perl pg_dump.pl --dir '/tmp' --keep_count=5 --host='localhost' --database=foo pg_user=foo pg_password=hacker =cut