Скрипт ротации (архивирования / удаления) журнала в Solaris - PullRequest
0 голосов
/ 02 ноября 2018

Были те же файлы ротации журналов в среде Linux, и там они работают. В Solaris у меня проблемы с запуском этих скриптов:

Основное назначение скриптов - удалить все журналы старше 30 дней и сжать все журналы старше 5 дней. -not -name используется, потому что я хочу работать только с повернутыми файлами журнала, например something.log.20181102, потому что файлы .log являются текущими, и я не хочу их трогать.

#!/bin/bash

find ./logs -mindepth 1 -mtime +30 -type f -not -name "*.log" -delete
find ./logs -mtime +5 -not -name "*.log" -exec gzip {} \;

Проблемы возникают с -mindepth и -not, потому что это дает ошибки:

find: bad option -not
find: [-H | -L] path-list predicate-list

На основании поиска я должен как-то использовать -prune в поиске, но я не слишком уверен, как это сделать.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

С помощью @Danek Duvall и с некоторыми поисками я получил его на работу:

find ./logs -mtime +30 -type f ! -name "*.log" -exec rm -f {} \;
find ./logs -mtime +5 ! -name "*.log" -exec gzip {} \;

Удаляет все файлы журналов старше 30 дней, а затем архивирует файлы старше 5 дней.

0 голосов
/ 02 ноября 2018

Если вы посмотрите страницу руководства для find(1) в Linux (или gfind(1) в Solaris), вы увидите

-not expr
    Same as ! expr, but not POSIX compliant.

Таким образом, вы сможете заменить -not на !, хотя вам нужно будет убрать его из оболочки, либо с обратной косой чертой, либо с одинарными кавычками:

find ... \! -name "*.log" ...

Обратите внимание, что в Solaris есть команда под названием logadm, которая предназначена для того, чтобы помочь вам позаботиться о подобных вещах, и, возможно, ее стоит изучить, если вы не хотите вести себя одинаково как в Solaris, так и в Linux.

...