Однонаправленная синхронизация / постепенная репликация большого файла

$ HOME указывает на домашний каталог пользователя, в котором запущен сценарий. Службы systemd запускаются с правами root, поэтому он, скорее всего, попытается открыть /root/theFolder/run.sh . Используйте абсолютные пути в служебных файлах.

У вас также есть параметр разветвления . Это необходимо для программы, которая сама работает в фоновом режиме, ваш скрипт делает это? Большинство из них этого не делают, и если у вас нет, вам следует удалить эту опцию, иначе systemd будет ждать завершения вашего скрипта, чтобы заявить, что он запущен.

Также не рекомендуется использовать системные служебные файлы, указывающие на сценарии в вашем домашнем каталоге, и, возможно, это проблема безопасности. Поскольку они запускаются с правами root, любой, кто может их изменить, потенциально может получить root-доступ к вашему компьютеру.Гораздо лучше скопировать сценарий в / usr / local / bin и убедиться, что он принадлежит и доступен для записи только пользователю root, чтобы предотвратить это. Также рекомендуется запустить сценарий от имени непривилегированного пользователя, используя параметры User = и Group = в служебном файле.

Если вы хотите запустить его от имени своего пользователя, лучше поместить служебный файл в ~ / .config / systemd / user / и запустить / включить его с помощью systemctl --user enable yourservice && systemctl --user start yourservice (обратите внимание, запускайте как ваш пользователь, а не root). См. и для получения дополнительной информации о пользовательских служебных файлах.

3
09.03.2017, 23:16
2 ответа

Если он только добавляется к (а не изменяется в середине), вы можете просто запустить tail -f на нем. Он должен дождаться любых новых добавленных данных и распечатать их, и вы можете указать ему, с какой позиции начинать:

tail -c 0 -f datafile        # start at the current file end
tail -c +123 -f datafile     # start at byte 123 

Чтобы фактически переместить данные куда-нибудь, должен работать конвейер до ssh :

Итак если на удаленном конце уже есть первые 123456 байтов:

tail -c +123456 -f datafile | ssh user@somehost 'cat >> datafile.copy'

(Хотя, конечно, вам нужно проверить размер файла на удаленном компьютере перед запуском конвейера.)


Если вместо этого у вас есть изменения в середине файл, вам понадобится какой-то уровень ведения журнала в самой программе. Снимки файловой системы могут подойти, но интервал в одну секунду может быть слишком сложным, особенно если вам все равно придется сканировать файл на предмет изменений.

4
27.01.2020, 21:18

Rsync должен выдвигать дельты после начальной синхронизации. Другой вариант - сделать снимок расположения файла. Это будет зависеть от того, используете ли вы LVM или имеете ли файловую систему, поддерживающую моментальные снимки. Вы можете сделать снимок, а затем синхронизировать файл с удаленным расположением. Затем удалите снимок. Мне также нравится эта идея, потому что вы не трогаете живой файл.

0
27.01.2020, 21:18

Теги

Похожие вопросы