Я установил PostgresQL 11 через apt-get на Debian 9. После установки я удалил кластер базы данных по умолчанию и удалил все службы, автоматически запускающие этот кластер. Я запустил initdb для инициализации нового кластера в произвольном месте, написал и включил файл systemd .service для его автоматического запуска.
У меня возникла проблема с успешным запуском службы при запуске компьютера, но затем база данных мгновенно закрывается, а служба сразу же останавливается. То же самое происходит, когда я вручную запускаю службу с помощью systemctl.
.service файл:
[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)
[Service]
Environment=PGDATA=/home/(user)/.db
Environment=PGLOG=/home/(user)/postgres.log
Environment=PGSTARTTIMEOUT=270
Type=notify
User=(user)
Group=(group)
ExecStart=/usr/lib/postgresql/11/bin/pg_ctl start -D ${PGDATA} -l ${PGLOG} -t ${PGSTARTTIMEOUT}
ExecStop=/usr/lib/postgresql/11/bin/pg_ctl stop -D ${PGDATA} -m fast
ExecReload=/usr/lib/postgresql/11/bin/pg_ctl reload -D ${PGDATA}
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=300
[Install]
WantedBy=multi-user.target
Команда для запуска кластера вручную:
su (user) -c '/usr/lib/postgresql/11/bin/pg_ctl start -D /home/(user)/.db -l /home/(user)/postgres.log -t 270'
Журнал PostgreSQL при запуске через systemctl:
2019-01-13 11: 36: 16.506 EST [1469] LOG: прослушивание IPv4-адреса «127.0.0.1», порт 5432
2019-01-13 11: 36: 16.508 EST [1469] LOG: прослушивание сокета Unix "/var/run/postgresql/.s.PGSQL.5432"
2019-01-13 11: 36: 16.530 EST [1470] LOG: система базы данных была отключена в 2019 01-13 11:17:07 EST
2019-01-13 11: 36: 16.537 EST [1469] LOG: система базы данных готова принимать соединения
2019-01-13 11: 36: 16.595 EST [1469] LOG: получен запрос на быстрое отключение
2019-01-13 11: 36: 16.600 EST [1469] LOG: отмена любых активных транзакций
2019-01-13 11: 36: 16.605 EST [1469] LOG: фоновый рабочий «модуль запуска логической репликации» (PID 1476) завершился с кодом выхода 1
2019-01-13 11: 36: 16.605 EST [1471] LOG: завершение работы
2019-01-13 11: 36: 16.625 EST [1469] LOG: система базы данных отключена
journalctl | grep postgres:
13 января 11:42:01 vps76296 systemd [1]: Запуск сервера базы данных PostgreSQL ...
13 января 11:42:01 vps76296 systemd [1]: Запуск СУБД PostgreSQL ...
13 января, 11:42:02 vps76296 systemd [1]: запущена СУБД PostgreSQL.
13 января, 11:42:02 vps76296 systemd [1]: postgres-start.service: Получено уведомление от PID 749, но прием разрешен только для основного PID 729
13 января, 11:42:02 vps76296 pg_ctl [729]: ожидание запуска сервера .... готово
13 января, 11:42:02 vps76296 pg_ctl [729]: сервер запущен
13 января 11:42:02 vps76296 pg_ctl [761]: ожидание завершения работы сервера .... готово
13 января, 11:42:02 vps76296 pg_ctl [761]: сервер остановлен
13 января, 11:42:02 vps76296 systemd [1]: запущен сервер базы данных PostgreSQL.
Журнал strace также доступен по запросу. Это действительно долго, поэтому я решил не включать его, если в этом нет необходимости.
Почему мой сервис мгновенно останавливается сразу после запуска?
Который Type=notify
вызывает у меня подозрения. В соответствии с системные документы: "… Похоже на exec; однако ожидается, что служба отправит уведомление через sd_notify(3)
… »
И pg_ctl
не сам демон, а его управляющая утилита, которая должна немедленно выйти.
Я бы предложил использовать разные Type
- oneshot
.
Также обратите внимание на systemctl status …serviceName…
вывод - может быть объяснение.