Моя система - это 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
Последняя строка не была записана, потому что файловая система уже была размонтирована.
Заранее спасибо!
Бруно