В конце передачи rsync
проверяет, совпадает ли переданный файл с тем, который начали передавать. Если файлы не совпадают, он предупреждает вас об этом и переходит к следующему. Если у вас стоит --remove-source-files
, он не будет удалять файл, который, по его мнению, был передан неправильно или не полностью.
При условии, что существует окно возможностей, в течение которого rsync
может успешно передать файлы журнала, нет большого вреда в том, чтобы повторять rsync
чаще - или даже повторять его до тех пор, пока он не будет успешным:
k=3
while test 0 -lt $k && k=$((k-1))
do
rsync .... && break
sleep 10
done
Если это не сработает, вам придется подумать о том, как сделать "моментальный снимок" файлов журнала на время, достаточное для копирования:
ssh -q remote_host 'mkdir -p rsync.tmp; cp -p *.log rsync.tmp/'
rsync -a --remove-source-files remote_host:/path/to/logs/rsync.tmp/*.log ....
У меня нет Ubuntu 16.04, чтобы протестировать это или предоставить вам много подробностей, но systemd имеет функцию совместимости, позволяющую использовать старые /etc/init.d
скрипты для продолжения работы. Вместо использования update-rc.d
, чтобы включить ваш демон, используйте эквивалент собственной команды systemd:
sudo systemctl enable mydaemon
Если это по-прежнему вызывает ту же ошибку, добавьте недостающие строки в начальный набор комментариев в вашем сценарии:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
между # ## BEGIN INIT INFO
и ### END INIT INFO
и повторите попытку.
См. Описание этих строк LSB core .
Вы также можете явно запустить демон с помощью
sudo systemctl start mydaemon
и запросить его статус с помощью
sudo systemctl status -l mydaemon
См. man systemd-sysv-generator
для возможности совместимости. См. эту вики для преобразования System V или сценариев выскочки, подобных вашему, в собственные модули systemd.