запустить службу systemd непосредственно перед выключением

запустить службу systemd непосредственно перед выключением

Я разрабатываю скрипт завершения работы systemd (файл модуля) для базы данных postgresql и следовал двум приведенным ниже постам, но не смог заставить его работать.

Как запустить скрипт с помощью systemd прямо перед выключением?

https://superuser.com/questions/1016827/how-do-i-run-a-script-before-everything-else-on-shutdown-with-systemd

Вот что я делаю с моей установкой postgresql: я написал скрипт запуска, который запускает кластер базы данных postgresql во время загрузки, но скрипт выключения, показанный ниже, похоже, не работает во время выключения. Хотя он работает нормально, если я запускаю его с помощью systemctl start service_name.

Когда я посмотрел на журнал базы данных, я увидел сообщение "LOG: received smart shutdown request", которое является сообщением, когда кластер базы данных отключается в обычном режиме, что является тем, что делает операционная система, когда я выключаю хост с помощью "shutdown -h now". Я хочу увидеть "LOG: received fast shutdown request", которое является быстрым (немедленным) выключением, которое происходит, когда я запускаю скрипт с помощью systemctl start service_name

Вот определение файла модуля

[Unit]
Description=Database Shutdown
Before=shutdown.target reboot.target halt.target
DefaultDependencies=no
[Service]
ExecStart=/usr/bin/su - postgres -c "/opt/postgres-95/bin/pg_ctl -D /database/inst1/data -w stop &"
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=shutdown.target

Я также пытался удалить этот [Install]раздел, но systemctl не позволял мне включить службу без этого [Install]раздела. Может ли кто-нибудь указать мне правильное направление?

решение1

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

/etc/systemd/system/postgresql.d/

В нем создайте файл с любым именем, заканчивающимся на .conf, например custom-shutdown.conf. Добавьте в этот файл пару строк, например:

[Service]
ExecStop=/usr/bin/su - postgres -c "/opt/postgres-95/bin/pg_ctl -D /database/inst1/data -w stop &" 

Вы можете использовать его ExecStopPost=в зависимости от вашего случая.

Смотрите официальные документы дляРасширение конфигурации по умолчаниюа также официальные документы дляExecStop=и ExecStopPost=.

Связанный контент