Как вращать журналы графита?

TL; DR:

Все файлы, которые присутствуют в обоих src и dest, можно удалить из dest следующим образом:

find . -maxdepth 1 -type f -exec cmp -s '{}' "$destdir/{}" \; -exec mv -n "$destdir/{}" "$toDelete"/ \;

Упрощение проблемы:

Чтобы понять, что команда, которую мы хотим отменить, на самом деле, мы начинаем с ее симуляции: [!d4 ]

Команда, которую мы хотим отменить, -

sudo cp From_SOURCE/* To_DESTINATION/

Для понимания того, как отменить, sudo не имеет значения.

Я буду использовать имена каталогов src для From_SOURCE и dest для To_DESTINATION.

Теперь наша команда:

cp src/* dest/

Если src содержит файлы f1, f2 ] и f3, а также каталоги d1 и d2, оболочка расширяет эту команду до:

cp src/f1 src/f2 src/f3 src/d1 src/d2 dest/

Без таких параметров, как -r, -R или -a, Команда cp не копирует каталоги. Это означает, что команда оставит их, показывая ошибку для каждого из них:

$ cp src/f1 src/f2 src/f3 src/d1 src/d2 dest/
cp: omitting directory 'src/d1'
cp: omitting directory 'src/d2'

Это означает, что мы только скопировали простые файлы и каталоги на dest.

Выбор файлов для удаления:

Возможно, в dest были файлы с тем же именем, что и файлы в src. В этом случае файлы были перезаписаны (1). Мне жаль, слишком поздно. Верните их из последней резервной копии.

Что касается файлов, которые есть, мы хотим удалить только файлы, которые были скопированы. Эти файлы существуют в обоих каталогах, с тем же именем и с одним и тем же контентом.

Итак, мы ищем эти файлы:

Во-первых, мы cd в src, поскольку он делает следующие команды find намного проще и устанавливает переменную в абсолютный путь dest:

$ cd src
$ destdir="$(readlink -f dest)"

Затем мы перечислим все файлы в src:

$ find . -maxdepth 1 -type f

и для каждого найденного файла используйте cmp, чтобы проверить, есть ли файл с тем же содержимым в dest:

$ find . -maxdepth 1 -type f -exec cmp -s '{}' "$destdir/{}" \; -print

Извлеките файлы, внимательно:

Эти файлы - те, которые мы хотим удалить. Но, конечно, сначала переместите их в другой каталог - и взгляните на команды перед их запуском:

$ toDelete=/tmp/toDelete ; mkdir -p "$toDelete"
$ find . -maxdepth 1 -type f -exec cmp -s '{}' "$destdir/{}" \; -exec echo mv -n "$destdir/{}" "$toDelete"/ \;
mv -n /path/to/dest/./f1 /tmp/toDelete/`
mv -n /path/to/dest/./f2 /tmp/toDelete/`
mv -n /path/to/dest/./f3 /tmp/toDelete/`

Выглядит хорошо! Теперь мы можем оставить echo для выполнения настоящих команд mv:

find . -maxdepth 1 -type f -exec cmp -s '{}' "$destdir/{}" \; -exec mv -n "$destdir/{}" "$toDelete"/ \;

Все файлы из dest, которые были скопированы из src, и по-прежнему на самом деле одинаковы в [ f40] и dest, теперь находятся в /tmp/toDelete/ и могут быть удалены после последнего взгляда.

Примечания: (1) Проверьте, является ли cp псевдонимом cp -i или так, что предотвратило бы перезапись файлов, спросив сначала.

3
задан 15 November 2017 в 21:12

3 ответа

Хорошо, я понял это ... Поскольку графитовые процессы фактически запускаются Apache в типичной конфигурации Ubuntu, это Apache, который должен быть уведомлен при каждом повороте журналов. [!d0 ]

Итак, я скопировал предложение postrotate из /etc/logrotate.d/apache2 в графический файл.

В качестве альтернативы можно просто удалить графический файл и добавить /var/log/graphite/*.log в список apache- logs ...

В целом, я должен признать, я разочарован пакетами Graphite, доступными для Ubuntu - они устарели и тонко неправильно сконфигурированы из коробки ... [!d3 ]

0
ответ дан 22 May 2018 в 16:12

Хорошо, я понял это ... Поскольку графитовые процессы, фактически, запускаются Apache в типичной конфигурации Ubuntu, это Apache, который должен быть уведомлен, всякий раз, когда журналы вращаются.

Итак, я скопировал предложение postrotate из /etc/logrotate.d/apache2 в графический файл.

В качестве альтернативы можно просто удалить графический файл и добавить /var/log/graphite/*.log в список apache- logs ...

В целом, я должен признать, я разочарован пакетами Graphite, доступными для Ubuntu - они устарели и тонко неправильно сконфигурированы из коробки ...

0
ответ дан 18 July 2018 в 03:14

Хорошо, я понял это ... Поскольку графитовые процессы, фактически, запускаются Apache в типичной конфигурации Ubuntu, это Apache, который должен быть уведомлен, всякий раз, когда журналы вращаются.

Итак, я скопировал предложение postrotate из /etc/logrotate.d/apache2 в графический файл.

В качестве альтернативы можно просто удалить графический файл и добавить /var/log/graphite/*.log в список apache- logs ...

В целом, я должен признать, я разочарован пакетами Graphite, доступными для Ubuntu - они устарели и тонко неправильно сконфигурированы из коробки ...

0
ответ дан 24 July 2018 в 17:47

Другие вопросы по тегам:

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