проблема запуска pgbouncer

Вопрос или проблема

Я следовал шагам из http://www.guguncube.com/1692/pgbouncer-installation-and-configuration-in-ubuntu для настройки pgbouncer.

Когда я запускаю pgbouncer, я получаю ошибку

Не удалось открыть файл журнала: 'pgbouncer.log': Доступ запрещен

Транскрипция отладки:

rajavelu-1469@rajavelu-1469:/etc/pgbouncer$ pgbouncer -d -v pgbouncer.ini 
2014-12-29 15:39:31.045 18299 DEBUG parse_ini_file: [databases]
2014-12-29 15:39:31.045 18299 DEBUG parse_ini_file: '*' = 'host=localhost port=5432 user=$USER'
2014-12-29 15:39:31.045 18299 DEBUG parse_ini_file: '*' = 'host=localhost port=5432 user=$USER' ok:1
2014-12-29 15:39:31.045 18299 DEBUG parse_ini_file: [pgbouncer]
2014-12-29 15:39:31.046 18299 DEBUG parse_ini_file: 'listen_port' = '5433'
2014-12-29 15:39:31.046 18299 DEBUG parse_ini_file: 'listen_port' = '5433' ok:1
2014-12-29 15:39:31.046 18299 DEBUG parse_ini_file: 'listen_addr' = 'localhost'
2014-12-29 15:39:31.046 18299 DEBUG parse_ini_file: 'listen_addr' = 'localhost' ok:1
2014-12-29 15:39:31.046 18299 DEBUG parse_ini_file: 'auth_type' = 'any'
2014-12-29 15:39:31.046 18299 DEBUG parse_ini_file: 'auth_type' = 'any' ok:1
2014-12-29 15:39:31.046 18299 DEBUG parse_ini_file: 'logfile' = 'pgbouncer.log'
2014-12-29 15:39:31.046 18299 **СЕРЬЕЗНАЯ Ошибка: Не удалось открыть файл журнала: 'pgbouncer.log': Доступ запрещен**

Когда я запускаю pgbouncer с sudo, я получаю ошибку

@src/main.c:736 в функции main(): PgBouncer не должен запускаться от имени root".

Транскрипция отладки:

rajavelu-1469@rajavelu-1469:/etc/pgbouncer$ sudo pgbouncer -d -v pgbouncer.ini 
2014-12-29 15:39:54.861 18302 DEBUG parse_ini_file: [databases]
2014-12-29 15:39:54.861 18302 DEBUG parse_ini_file: '*' = 'host=localhost port=5432 user=$USER'
2014-12-29 15:39:54.861 18302 DEBUG parse_ini_file: '*' = 'host=localhost port=5432 user=$USER' ok:1
2014-12-29 15:39:54.861 18302 DEBUG parse_ini_file: [pgbouncer]
2014-12-29 15:39:54.862 18302 DEBUG parse_ini_file: 'listen_port' = '5433'
2014-12-29 15:39:54.862 18302 DEBUG parse_ini_file: 'listen_port' = '5433' ok:1
2014-12-29 15:39:54.862 18302 DEBUG parse_ini_file: 'listen_addr' = 'localhost'
2014-12-29 15:39:54.862 18302 DEBUG parse_ini_file: 'listen_addr' = 'localhost' ok:1
2014-12-29 15:39:54.862 18302 DEBUG parse_ini_file: 'auth_type' = 'any'
2014-12-29 15:39:54.862 18302 DEBUG parse_ini_file: 'auth_type' = 'any' ok:1
2014-12-29 15:39:54.862 18302 DEBUG parse_ini_file: 'logfile' = 'pgbouncer.log'
2014-12-29 15:39:54.862 18302 DEBUG parse_ini_file: 'logfile' = 'pgbouncer.log' ok:1
2014-12-29 15:39:54.862 18302 DEBUG parse_ini_file: 'pidfile' = 'pgbouncer.pid'
2014-12-29 15:39:54.862 18302 DEBUG parse_ini_file: 'pidfile' = 'pgbouncer.pid' ok:1
2014-12-29 15:39:54.862 18302 **СЕРЬЕЗНАЯ ошибка @src/main.c:736 в функции main(): PgBouncer не должен запускаться от имени root**

Мой файл pgbouncer.ini выглядит так:

[databases]
* = host=localhost port=5432 user=$USER
[pgbouncer]
listen_port = 5433
listen_addr = localhost
auth_type = any
logfile = pgbouncer.log
pidfile = pgbouncer.pid

Я знаю, что это старое сообщение, но я только что столкнулся с этой ошибкой сегодня на своем сервере FreeBSD. Стандартная установка в порядке, но мне нужно было запустить другой экземпляр pgbouncer.

Чтобы исправить это, мне пришлось изменить rc.d/pgbouncer и добавить -u для выполнения.

. /etc/rc.subr

name="pgbouncer_slave"
rcvar=pgbouncer_enable

load_rc_config "$name"
: ${pgbouncer_enable="NO"}
: ${pgbouncer_user="pgbouncer"}
: ${pgbouncer_conf="/usr/local/etc/$name.ini"}

extra_commands="reload"

command="/usr/local/bin/pgbouncer"
pidfile="/var/run/pgbouncer/$name.pid"
required_files="${pgbouncer_conf}"
command_args="-d ${pgbouncer_conf} -u pgbouncer"

run_rc_command "$1"

Убедитесь, что файл журнала принадлежит пользователю postgres.

Ответ или решение

Проблема с запуском PgBouncer: Разрешения и конфигурация

Если вы столкнулись с ошибкой «Cannot open logfile: ‘pgbouncer.log’: Permission denied» при попытке запустить PgBouncer, это указывает на проблему с правами доступа к файлам. Давайте разберем решение этой проблемы поэтапно.

Шаг 1: Проверка прав доступа

Ошибка, связанная с доступом к файлу журнала, возникает, когда пользователь, под которым вы запускаете PgBouncer, не имеет необходимых прав для записи в указанный файл журнала. Чтобы решить эту проблему, выполните следующие шаги:

  1. Определите пользователя, от имени которого работает PgBouncer. Обычно это может быть postgres или другой системный пользователь, назначенный для работы с PgBouncer.

  2. Проверьте, существует ли файл журнала. Если файл pgbouncer.log еще не создан, он будет автоматически создан при первом запуске, но необходимо удостовериться, что директория, в которой он должен появиться, доступна для записи.

  3. Измените владельца файла журнала. Если файл уже существует, выполните команду:

    sudo chown postgres:postgres /path/to/pgbouncer.log

    Убедитесь, что подставили правильный путь к файлу.

  4. Проверьте права директории. Убедитесь, что у директории, где должен находиться файл pgbouncer.log, установлены корректные права:

    sudo chmod 755 /path/to/directory

Шаг 2: Запуск PgBouncer без прав администратора

Ошибка «PgBouncer should not run as root» возникает, если вы пытаетесь запустить PgBouncer с правами суперпользователя (root). Это связано с тем, что PgBouncer по соображениям безопасности не должен работать от имени root.

  1. Запуск от имени правильного пользователя. Для запуска PgBouncer выполните:
    sudo -u postgres pgbouncer -d -v pgbouncer.ini

    Замените postgres на пользователя, который был назначен для управления PgBouncer, если это другой пользователь.

Шаг 3: Настройка pgbouncer.ini

В вашем файле pgbouncer.ini уже прописаны необходимые параметры, такие как logfile и pidfile. Убедитесь, что они корректно указаны. Пример конфигурации файла:

[databases]
* = host=localhost port=5432 user=$USER

[pgbouncer]
listen_port = 5433
listen_addr = localhost
auth_type = any
logfile = /var/log/pgbouncer/pgbouncer.log  ; Убедитесь, что путь доступен
pidfile = /var/run/pgbouncer/pgbouncer.pid

Проверьте, что файл журнала указывает на директорию, в которой он может быть создан.

Шаг 4: Проверьте конфигурацию системы (для FreeBSD)

Если вы используете FreeBSD и настроили PgBouncer через rc.d, проверьте, что файл конфигурации корректно настроен для запуска от имени нужного пользователя. Пример:

: ${pgbouncer_user="pgbouncer"}  ; Убедитесь, что это правильный пользователь
command_args="-d ${pgbouncer_conf} -u pgbouncer"

Не забудьте перезапустить службу PgBouncer после внесения изменений в конфигурацию.

Заключение

Следуя вышеуказанным шагам, вы сможете решить проблемы с запуском PgBouncer, связанные с правами доступа и неправильным запуском пользователя. Это обеспечит правильную работу PgBouncer и предотвратит возникновение подобных ошибок в будущем. Помните, что безопасный запуск сервисов и корректные права доступа – это основные принципы администрирования систем.

Оцените материал
Добавить комментарий

Капча загружается...