powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Автозапуск PostgreSQL 9.6 в Debian 8
6 сообщений из 6, страница 1 из 1
Автозапуск PostgreSQL 9.6 в Debian 8
    #39379561
_cx_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую вас!
Столкнулся с проблемой старта PostgreSQL 9.6 при загрузке ОС Debian 8.
Автозапуск пытаюсь сделать собственным скриптом написанным в соответствии с официальной документацией по СУБД (пп. 18.3 Запуск сервера БД, стр. 565)

Содержимое файла \etc\init.d\postgresql:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
#!/bin/sh -e

### BEGIN INIT INFO
# Provides:		postgresql
# Required-Start:	$local_fs $remote_fs $network $time
# Required-Stop:	$local_fs $remote_fs $network $time
# Should-Start:		$syslog
# Should-Stop:		$syslog
# Default-Start:	2 3 4 5
# Default-Stop:		0 1 6
# Short-Description:	PostgreSQL RDBMS server
### END INIT INFO

PG_PATH="/usr/lib/postgresql/9.6/bin"
PGDATA="/var/lib/postgresql/9.6/main"

PATH=/bin:/usr/bin:/sbin:/usr/sbin
DESC="postgresql daemon"
NAME=postgresql
DAEMON=/usr/lib/postgresql/9.6/bin/postgresql
PIDFILE="$PGDATA/postmaster.pid"
SCRIPTNAME=/etc/init.d/"$NAME"

case "$1" in 
  start)
	su - postgres -c "$PG_PATH/pg_ctl start -D $PGDATA -l $PGDATA/log_file.txt"
    exit 0
    ;;
  stop|status)
    su - postgres -c "$PG_PATH/pg_ctl $1"
  ;;
  kill)
    su - postgres -c "$PG_PATH/pg_ctl stop -m fast"
  ;;
  reboot)
    $0 kill
    $0 start
  ;;
  *)
    echo "Используйте: $0 {start|stop|kill|reboot|status}"
    exit 1
    ;;
esac
exit 0


При запуске из консоли скрипт работает корректно
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
root@debian:~# /etc/init.d/postgresql start
сервер запускается
root@debian:~# /etc/init.d/postgresql status
pg_ctl: сервер работает (PID: 759)
/usr/lib/postgresql/9.6/bin/postgres "-D" "/var/lib/postgresql/9.6/main"
root@debian:~# /etc/init.d/postgresql stop
ожидание завершения работы сервера.... готово
сервер остановлен
root@debian:~#


На скрипт есть ссылки в:
/etc/rc0.d -> K02postgresql
/etc/rc1.d -> K02postgresql
/etc/rc2.d -> S02postgresql
/etc/rc3.d -> S02postgresql
/etc/rc4.d -> S02postgresql
/etc/rc5.d -> S02postgresql
/etc/rc6.d -> K02postgresql

Пытался разобраться со стандартным скриптом автозапуска PostgeSQL, но не осилил.
Тем более, что в мануале по postgresql рекомендуется делать именно так.
Уже отчаялся искать ответ в Инете. Прошу конкретного совета.
...
Рейтинг: 0 / 0
Автозапуск PostgreSQL 9.6 в Debian 8
    #39379562
_cx_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На всякий случай сделал
Код: powershell
1.
2.
update-rc.d -f postgresql remove
update-rc.d postgresql defaults


Ссылки исчезли, и появились вновь.
Не помогло.
...
Рейтинг: 0 / 0
Автозапуск PostgreSQL 9.6 в Debian 8
    #39380084
_cx_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё актуально))
На первое время сделал костыль в виде скрипта
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
PGDATA="/var/lib/postgresql/9.6/main"
[ -r $PGDATA/postmaster.pid ]
if [ $? -eq 1 ] 
then 
#pid-файл не существует, сервер остановлен
  echo `date +"%x - %T"`" - Сервер не включен. осуществляю запуск..." >> $PGDATA/stat.log 
  /etc/init.d/postgresql start
  exit $?  
fi
exit 0


Запускаю его в cron.
Решение так себе, но пока лучшего варианта я не нашел.
Видно не самое подходящее время для вопросов))
...
Рейтинг: 0 / 0
Автозапуск PostgreSQL 9.6 в Debian 8
    #39380087
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_cx_, Debian 8 — там же systemd или Вы sysvinit поставили обратно?
...
Рейтинг: 0 / 0
Автозапуск PostgreSQL 9.6 в Debian 8
    #39380091
_cx_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет. не ставил.
Направление понял.
Нужно смотреть в сторону адаптации скрипта к systemd
...
Рейтинг: 0 / 0
Автозапуск PostgreSQL 9.6 в Debian 8
    #39380156
_cx_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Ёш!
Повезло, наткнулся на хорошую статью на Хабрахабре
Systemd за пять минут
По ней:
1. В /etc/systemd/system/multi-user.target.wants нашел ссылку на unit postgresql.service
2. Переписал его следующим образом
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
[Unit]
Description=PostgreSQL RDBMS

[Service]
Type=forking 
PIDFile=/var/lib/postgresql/9.6/main/postmaster.pid
WorkingDirectory=/usr/lib/postgresql/9.6/bin
User=postgres
Group=postgres
Environment=PGDATA=/var/lib/postgresql/9.6/main
OOMScoreAdjust=-100

ExecStart=/usr/lib/postgresql/9.6/bin/pg_ctl start -D /var/lib/postgresql/9.6/main -l /var/lib/postgresql/9.6/main/log_file.txt
ExecStop=/usr/lib/postgresql/9.6/bin/pg_ctl stop -m fast
ExecReload=/usr/lib/postgresql/9.6/bin/pg_ctl restart -D /var/lib/postgresql/9.6/main
TimeoutSec=60
#Restart=always

#ExecStart=/bin/true
#ExecReload=/bin/true
#RemainAfterExit=on

[Install]
WantedBy=multi-user.target



К стати, здесь используется решение, которое позволяет препятствовать агрессивной работе OOM killer о которой пишется в мануале по postgres. О нем говорится что его невозможно остановить, но оказывается что это возможно, указав OOMScoreAdjust=-1000
OOM killer - механизм уничтожения процессов при нехватке памяти, который был реализован на уровне ядра, начиная с Linux 2.6 и новее.

Ещё возможно раскомментировать строчку #Restart=always.
В таком случае будет отслеживаться наличие указанного PIDFile и при его отсутствии производиться попытка запуска postgresql
Можно считать это аналогом скрипта из моего предшествующего поста, но с реализацией на уровне системы ))

После изменения unit-файла postgresql.service поочередно выполнил команды для переустановки и проверки его работы
Код: powershell
1.
2.
3.
4.
5.
systemctl disable postgresql.service
systemctl enable postgresql.service
systemctl -l status postgresql.service
systemctl start postgresql.service
systemctl stop postgresql.service



При выключении системы сервер корректно останавливается и при старте ОС Debian 8 автоматом загружается.
Убрал костыль, который делал для Cron'а

Если есть недостатки в предложенном решении с радостью выслушаю.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Автозапуск PostgreSQL 9.6 в Debian 8
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]