Назад | Перейти на главную страницу

systemd - завершить сценарий завершения работы до отключения файловой системы CentOS 7

Моя система - это CentOS 7. Systemd отключает локальную файловую систему до того, как мой долгий скрипт выключения завершится. Таким образом, последние команды записи вызывают ошибку. Я нашел много ответов, предполагающих, что вам следует использовать mount-unit, но с креплениями я не занимаюсь. Я пробовал все возможные комбинации After =, Conflicts = и Before = с umount.target и local-fs.target, но без толку. Я должен запускать этот сценарий во время загрузки, потому что мне нужно запустить несколько демонов и уладить все, и при выключении, потому что я должен остановить демонов и очистить вещи до выключения компьютера. Чтобы было понятнее, я написал пример, который действует как мой настоящий сценарий.

Юнит-файл:

[Unit]
Description = long running script
After=local-fs.target
[Service]
PrivateTmp=false
Type=forking
GuessMainPID=false
RemainAfterExit=true
StandardOutput=syslog+console
StandardError=syslog+console
ExecStart = /bin/longrunning start
ExecStop = /bin/longrunning stop
TimeoutStartSec=50
[Install]
WantedBy = graphical.target  multi-user.target

Сценарий:

#!/bin/bash
echo "Long running $1"
echo "Long running $1" > /var/opt/somewhere/long.$$
date >>/var/opt/somewhere/long.$$
sleep 25
echo "Long running ends"
date >>/var/opt/somewhere/long.$$

Содержимое long. $$:

Long running stop
Mo 20. Jan 16:38:13 CET 2020

А должно быть:

Long running stop
Mo 20. Jan 16:38:13 CET 2020
Mo 20. Jan 16:38:38 CET 2020

Последняя строка не была записана, потому что файловая система уже была размонтирована.

Заранее спасибо!

Бруно