Thread: pg_archivecleanup standalone bash script

pg_archivecleanup standalone bash script

From
Patrick B
Date:
Hi all,

I want to hold the wal_files for 30 days on my slaves.
For that reason, I created a script to do that:

pg_archivecleaup_mv.bash:

#!/bin/bash -eu

declare -r -x PATH='/usr/local/bin:/usr/bin:/bin';

# We just wanna delete the wal_files older than 30 days
ARCHIVEDIR='/var/lib/pgsql/9.2/archive/'
CHKPOINT=$(find $ARCHIVEDIR -type f -mtime +30 -name '00*' -printf '%f\n' | sort -r | head -1)

cd $ARCHIVEDIR
/usr/pgsql-${PG_VERSION}/bin/pg_archivecleanup $ARCHIVEDIR $CHKPOINT
find $ARCHIVEDIR -type f -mtime +30 -a -name '00*' -a ! -newer $CHKPOINT -delete

recovery.conf:

archive_cleanup_command = 'exec nice -n 19 ionice -c 2 -n 7 ../../bin/pg_archivecleaup_mv.bash -d /var/lib/pgsql/9.2/archive "%r"'


PROBLEM:

I'm getting an error message:

pg_archivecleanup: must specify restartfilename
Try "pg_archivecleanup --help" for more information.
archive_cleanup_command "exec nice -n 19 ionice -c 2 -n 7 ../../bin/pg_archivecleaup_mv.bash -d "../archive" "%r"": return code 512

And I can't figure out what is wrong....


Please, do you guys can help?
Cheers;
Patrick 

Re: pg_archivecleanup standalone bash script

From
"David G. Johnston"
Date:
On Sun, Jul 31, 2016 at 6:11 PM, Patrick B <patrickbakerbr@gmail.com> wrote:

CHKPOINT=$(find $ARCHIVEDIR -type f -mtime +30 -name '00*' -printf '%f\n' | sort -r | head -1)
/usr/pgsql-${PG_VERSION}/bin/pg_archivecleanup $ARCHIVEDIR $CHKPOINT


​While I'm a bit suspect of this entire script/approach I believe the problem plaguing you at the moment is that your find command is not finding any files and thus your attempt to execute pg_archivecleanup only occurs with a single argument - which is an error.

For something this important I would advise considerably more debugging output and explicit error handling.  Don't rely on set -e

On a related note - I don't understand why you'd use the "exec" command here...

David J.

Re: pg_archivecleanup standalone bash script

From
Patrick B
Date:
This has been resolved.

cheers

Re: pg_archivecleanup standalone bash script

From
Alvaro Herrera
Date:
Patrick B wrote:
> This has been resolved.

How?

--
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services


Re: pg_archivecleanup standalone bash script

From
Patrick B
Date:
I'll ajust the script and once is done will share here with u guys


Patrick

Re: pg_archivecleanup standalone bash script

From
Patrick B
Date:

recovery.conf:

archive_cleanup_command = 'exec /var/lib/pgsql/bin/pg_archivecleaup_mv.bash'

Final pg_archivecleanup script:

#!/bin/bash

declare -r -x PATH='/usr/local/bin:/usr/bin:/bin';

ARCHIVEDIR='/var/lib/pgsql/archive'
LAST_BACKUP=$(ls -lto ${ARCHIVEDIR})

cd $ARCHIVEDIR
exec "/usr/pgsql-9.2/bin/pg_archivecleanup" -d /var/lib/pgsql/archive ${LAST_BACKUP} | find $ARCHIVEDIR -type f -mmin +30 -delete


2016-08-03 8:32 GMT+12:00 Patrick B <patrickbakerbr@gmail.com>:
I'll ajust the script and once is done will share here with u guys


Patrick