Установка pgAgent в Fedora 20

Возникла необходимость запуска заданий на сервере PostgreSQL. Простейший случай — запуск из CRON. Но хочется красивого. Сначала хотел создать свой велосипед, но после изучения советов из интернета, понял, поздно, велосипед уже изобретен, и стал изобретать колесо: остановился на pgAgent. Тем более — с ним хорошо дружит pgAdmin.

Пока данный инструмент не идёт в штатном комплекте пакетов. В качестве документа по установке использовал статью

В первую очередь установил недостающие утилиты и компоненты:

Это, чтобы было чем скачивать:

yum install wget

Непосредственно компилятор — собираем из исходников.

yum install gcc-c++ cmake

Честно говоря, сам не понял — зачем нужны графические библиотеки. Придется ломать домашний компьютер — проверить, может и без них будет работать?

yum install wxGTK wxGTK-devel wxWidgets

Это на случай, если ещё сам PostgreSQL не установлен:

 yum install postgresql-contrib postgresql-devel postgresql-libs postgresql-server

Дальше — если PostgreSQL ещё не установлен — инициализируем БД

postgresql-setup initdb

Запускаем сервер и устанавливаем ему автозапуск при старте системы.

systemctl start postgresql.service
 systemctl status postgresql.service
 systemctl enable postgresql.service

Теперь переходим непосредственно к развёртыванию самого pgAgent-а. Скачиваем исходники последней версии с ссылки http://www.postgresql.org/ftp/pgadmin3/release/pgagent/. В момент написания статьи — последняя версия имеет номер 3.4.0. Ссылка на файл — http://ftp.postgresql.org/pub/pgadmin3/release/pgagent/pgAgent-3.4.0-Source.tar.gz. После загрузки распаковываем архив.

 tar -xzf pgAgent-3.4.0-Source.tar.gz

Запускаем подготовку, компиляцию и установку.

cmake -D PG_CONFIG_PATH:FILEPATH=/usr/bin/pg_config -D STATIC_BUILD:BOOL=OFF .
 make
 su -c "make install"

Если всё было сделано верно — компиляция пройдёт успешно. Если нет — смотрим вывод и анализируем ошибки.

После установки необходимо создать таблицы для работы pgAgent-а в системной БД postgres. Скрипты на создание находятся в папке sql исходных текстов.

cd sql
psql -U postgres -d postgres -f pgagent.sql -h 127.0.0.1

На этом основная работа закончена. Можно проверить работу pgAgent-а запустив его в консоле.

/usr/local/bin/pgagent hostaddr=127.0.0.1 dbname=postgres user=postgres -f -l 2

В начале сообщений будет выдана информация по подключению к БД. После этого будет выдан протокол на каждую итерацию. Ключ -l 2 заставляет выводить в лог подробную информацию о работе. На первоначальном этапе рекомендую его включать. В будущем детализацию протокола можно понизить до уровня 0 — выдача только сообщений об ошибках.

В окончании работы обеспечиваем запуск агента средствами SystemD. Для этого создадим unit-файл для старта pgAgent-а — pgagent.service.

[Unit]
Description=PostgreSQL server agent
After=network.target
Requires=postgresql.service

[Service]
ExecStart=/usr/local/bin/pgagent hostaddr=127.0.0.1 dbname=postgres user=postgres -f -l 2
Type=simple

[Install]
WantedBy=network.target

Проверяем работу нашего сервиса

journalctl -u pgagent

При правильной установке видим:

[root@localhost system]# journalctl -u pgagent
-- Logs begin at Ср 2014-03-26 15:48:47 MSK, end at Ср 2014-09-24 11:38:00 MSK. --
сен 24 11:36:55 localhost.localdomain systemd[1]: Starting PostgreSQL server agent...
сен 24 11:36:55 localhost.localdomain systemd[1]: Started PostgreSQL server agent.
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG: Creating primary connection
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG: Connection Information:
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG:      user         : postgres
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG:      port         : 0
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG:      host         : 127.0.0.1
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG:      dbname       : postgres
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG:      password     :
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG:      conn timeout : 0
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG: Connection Information:
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG:      user         : postgres
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG:      port         : 0
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG:      host         : 127.0.0.1
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG:      dbname       : postgres
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG:      password     :
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG:      conn timeout : 0
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG: Creating DB connection: user=postgres hostaddr=127.0.0.1 dbname=postgres
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG: Database sanity check
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG: Clearing zombies
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG: Checking for jobs to run
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG: Sleeping...
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG: Clearing inactive connections
сен 24 11:38:00 localhost.localdomain pgagent[20593]: DEBUG: Connection stats: total - 1, free - 0, deleted - 0

Всё работает

Запись опубликована в рубрике PosgreSQL с метками , , , . Добавьте в закладки постоянную ссылку.