Cruiser78 пишет:Не получится коммитить транзакции.
Может отследить окончание транзакции перед ребутом/шотдауном/остановом ещё одним сервисом?
У ValentinK нужно уточнить, может быть при записи в базу мускула какой-нибудь *.lock файл создаётся, чтобы было к чему прицепиться. Уже 100 лет бд не занимался и то в InterBase. ))
Всё же думаю, что данные пишутся некой "загогулиной", у которой должен быть pid. Эта же прога занимается обработкой критических ситуаций при отсутствии доступа к БД. Гарантий не даю, поскольку сие из разряда "костылей". Будет ли оно ждать - не проверял. Можно проверить на файле (изменить условие ExecStart) и поиграться с типом сервиса. Т.е. пока существует файл, должен висеть. После удаления должен уйти в ребут и т.д.
В юните ниже отслеживается pid некого процесса.
/etc/systemd/system/my-transaction.service
[Unit]
Description=Control end of MySQL transaction
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
[Service]
Type=oneshot или simple или forking
ExecStart=/bin/bash -c 'while [[ -n $(pidof my_process) ]]; do echo "transaction active"; sleep 3; done' (в скрипт)
[Install]
WantedBy=halt.target reboot.target shutdown.target
p.s. Идиотизм конечно с моей стороны, но может и заработает... 
MSI H81M-ECO, Intel Core i3-4130T, Intel HD Graphics 4400 | MgaRemix-9 Budgie 10.8.1 x86_64 + Windows 10