Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

странное сообщение в логах - could not find a "pg_probackup" to execute #39

Closed
sgrinko opened this issue Dec 15, 2018 · 25 comments
Labels
Milestone

Comments

@sgrinko
Copy link

sgrinko commented Dec 15, 2018

Использую:
ванильный 11.1 постгресс
Ubuntu 16.04
pg_probackup 2.0.25 (PostgreSQL 11.1)
в настройках стоит такая команда для архивации WAL логов

archive_command = 'if [ -f archive_active.trigger ]; then pg_probackup archive-push -B /mnt/pgbak --instance 11 --wal-file-path %p --wal-file-name %f; else exit 0; fi'

при каждом сохранении получаю странное сообщение

could not find a "pg_probackup" to execute
INFO: pg_probackup archive-push from /var/lib/postgresql/11/main/pg_wal/0000000100000420000000BD to /mnt/pgbak/wal/11/0000000100000420000000BD
INFO: WAL file compressed to "/mnt/pgbak/wal/11/0000000100000420000000BD.gz"
INFO: pg_probackup archive-push completed successfully
could not find a "pg_probackup" to execute
INFO: pg_probackup archive-push from /var/lib/postgresql/11/main/pg_wal/0000000100000420000000BE to /mnt/pgbak/wal/11/0000000100000420000000BE
INFO: WAL file compressed to "/mnt/pgbak/wal/11/0000000100000420000000BE.gz"
INFO: pg_probackup archive-push completed successfully

при этом сама архивация WAL логов выполняется корректно.
с чем это может быть связано?

@gsmolk
Copy link
Contributor

gsmolk commented Dec 16, 2018

Добрый день!
pg_probackup - это симлинк?

@sgrinko
Copy link
Author

sgrinko commented Dec 18, 2018

Да, это симлинк
находится в каталоге /usr/lib/postgresql/11/bin
сам файл pg_probackup-11 находится в каталоге /usr/bin/

@gsmolk gsmolk closed this as completed Jan 19, 2019
@gsmolk gsmolk reopened this Jan 19, 2019
@gsmolk
Copy link
Contributor

gsmolk commented Jan 19, 2019

Странно, никак не могу воспроизвести.

@sgrinko
Copy link
Author

sgrinko commented Jan 21, 2019

чем могу помочь?
куда посмотреть, что попробовать ?

@windowsisnotos
Copy link

Сталкивался с подобной проблемой. В моем случае все решилось указанием полного пути до pg_probackup (для PostgreSQL PRO Standard):

/opt/pgpro/std-11/bin/pg_probackup

@gsmolk
Copy link
Contributor

gsmolk commented Mar 12, 2019

Это паллиативное решение, хочется понять что происходит.
Сегодня руки не дошли, завтра буду смотреть.

@windowsisnotos
Copy link

Второй вариант, прописать

PATH=$PATH:/opt/pgpro/std-11/bin
export PATH

В ~/.bash_profile пользователя postgres.

@gsmolk
Copy link
Contributor

gsmolk commented Mar 13, 2019

Да, это симлинк
находится в каталоге /usr/lib/postgresql/11/bin
сам файл pg_probackup-11 находится в каталоге /usr/bin/

А как пользователь постгрес находит этот симлинк? У меня на стенде пользователь postgres c по дефолту не имеет прописанного в PATH пути до /usr/lib/postgresql/11/bin

@sgrinko
Copy link
Author

sgrinko commented Mar 14, 2019

вот как он его находит:

postgres:~$ echo $PATH
/usr/lib/postgresql/11/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin
postgres:~$ which pg_probackup
/usr/lib/postgresql/11/bin/pg_probackup
postgres:~$ exit
logout
grinko:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
grinko:~$ which pg_probackup
/usr/bin/pg_probackup

/usr/lib/postgresql/11/bin/pg_probackup symlink на /usr/bin/pg_probackup-11
/usr/bin/pg_probackup symlink на /usr/bin/pg_probackup-11

в /etc/profile.d/ есть мой файл pg_env.sh

#!/bin/sh
# The script sets environment variables helpful for PostgreSQL
export PATH=/usr/lib/postgresql/11/bin:$PATH
export PGDATA=/var/lib/postgresql/11/main
export PGDATABASE=postgres
export PGUSER=postgres
export PGPORT=5432
export PGLOCALEDIR=/usr/share/locale
export MANPATH=$MANPATH:/usr/share/postgresql/11/man
export BACKUP_PATH=/mnt/pgbak

@gsmolk
Copy link
Contributor

gsmolk commented Mar 14, 2019

Смог воспроизвести

@sgrinko
Copy link
Author

sgrinko commented Apr 5, 2019

Отлично!
Как можно это побороть ?

@gsmolk
Copy link
Contributor

gsmolk commented Apr 9, 2019

Завтра постараюсь до конца разобраться. Но у меня ощущение, что это какой-то баг сборки постгреса.

@gsmolk gsmolk added the bug label May 7, 2019
@gsmolk
Copy link
Contributor

gsmolk commented May 7, 2019

Разобрался, дело в этом:
https://github.com/postgrespro/pg_probackup/blob/master/src/pg_probackup.c#L254

В 2.1.2 обязательно исправим.
Кстати, попутно обнаружил, что на 2.1.1 ваша схема архивирования сломается, потому что мы ошибочно заложились на постгресовый find_my_exec(), и теперь вместо безобидного ругательства он уже начнет "всерьез" падать. Поэтому я бы пока не рекомендовал обновляться на 2.1.1.

@gsmolk gsmolk added this to the 2.1.2 milestone May 7, 2019
@gsmolk
Copy link
Contributor

gsmolk commented May 8, 2019

Проблема в том, что имя бинаря в символической ссылке(pg_probackup) не соответствует реальному бинарю (pg_probackup-11), find_my_exec() к этому не готов и выдает ошибку

@gsmolk
Copy link
Contributor

gsmolk commented May 8, 2019

Как временное решение, можно символическую ссылку переименовать в pg_probackup-11

@sgrinko
Copy link
Author

sgrinko commented May 8, 2019

Спасибо. Буду ждать именно 2.1.2

@gsmolk
Copy link
Contributor

gsmolk commented May 8, 2019

@sgrinko, безотносительно сабжа, systemd игнорирует /etc/profile.d и .bashrc.
Поэтому ваша схема работает только потому, что есть симлинк /usr/bin/pg_probackup

@gsmolk
Copy link
Contributor

gsmolk commented May 8, 2019

Хм, переменная окружения "PATH" отсутствует в окружении archive-push, запускаемом архайвером:

(gdb) info proc
process 23571
warning: target file /proc/23571/cmdline contained unexpected null characters
cmdline = 'pg_probackup'
cwd = '/var/lib/postgresql/11/main'
exe = '/usr/bin/pg_probackup'
(gdb) p getenv("PATH")
$9 = 0
(gdb) bt
#0  find_my_exec (argv0=0x7ffe5c1e1e0f "pg_probackup", retpath=0x7ffe5c1dfbd0 "\001") at exec.c:202
#1  0x000055b5a73cd46e in set_pglocale_pgservice (argv0=0x7ffe5c1e1e0f "pg_probackup", app=0x55b5a73db475 "pgscripts") at exec.c:574
#2  0x000055b5a73bc070 in main (argc=10, argv=0x7ffe5c1e09f8) at src/pg_probackup.c:195

root@ubuntu:/home/gsmol# cat /proc/23571/environ 
LC_TIME=CPG_OOM_ADJUST_FILE=/proc/self/oom_score_adjLC_CTYPE=en_US.UTF-8LC_MONETARY=CPG_GRANDPARENT_PID=23346PGLOCALEDIR=/usr/share/localePGSYSCONFDIR=/etc/postgresql-commonLC_COLLATE=en_US.UTF-8LANG=en_US.UTF-8LC_MESSAGES=en_US.UTF-8PWD=/var/lib/postgresql/11/mainLC_NUMERIC=CPGDATA=/var/lib/postgresql/11/main 

@gsmolk
Copy link
Contributor

gsmolk commented May 8, 2019

Покопался еще немного и нашел настоящих виновников:
https://github.com/petere/postgresql-common/blob/master/pg_ctlcluster#L117

Тот факт, что у Debian Team рак мозга, с нас, конечно, вины не снимает, поэтому в ближайшем релизе archive-push и archive-get перестанут полагаться на окружение.

@gsmolk
Copy link
Contributor

gsmolk commented May 8, 2019

Временным паллиативным решением будет прописать PATH в /etc/postgresql/MAJOR_VERSION/main/environment

gsmolk added a commit that referenced this issue May 13, 2019
@gsmolk
Copy link
Contributor

gsmolk commented May 13, 2019

Fixed f697d57

@sgrinko
Copy link
Author

sgrinko commented May 14, 2019

ух... как всё сурово оказалось то...
Спасибо за разбор полётов и решение проблемки.

@gsmolk
Copy link
Contributor

gsmolk commented May 20, 2019

Fixed in 2.1.2 release.

@gsmolk
Copy link
Contributor

gsmolk commented May 20, 2019

Закрываем или есть еще вопросы?

@gsmolk
Copy link
Contributor

gsmolk commented May 21, 2019

Solved

@gsmolk gsmolk closed this as completed May 21, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants