Оболочка для сжатия и удаления логов один раз в месяц - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь запустить задание по расписанию в CentOS для .gz и удалить целый месяц журналов из каталога. Журналы называются somelogfile_12Apr19_18_19_41.log, somelogfile_28Mar19_07_08_20.log

Я могу запустить приведенный ниже скрипт, чтобы выполнить эту задачу вручную

tar -cvzf somezipfile_Mar19.tar.gz somelogfile_**Mar** --remove-files

Запланированное задание должно запускаться каждый 5-й день месяца для сжатия и удаления журналов предыдущих месяцев. Каким будет автоматический скрипт? Я застрял в том, как включить только журналы предыдущих месяцев на основе названия месяца (январь, февраль, март и т. Д.)

1 Ответ

1 голос
/ 14 апреля 2019

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

date -d "last month" +%b

При запуске 1 апреля 2019 года будет отображаться «март».

date -d "last month" +%b%y

При запуске 1 апреля 2019 года будет выдано «Mar19».

Теперь, когда мы знаем, как получить требуемую информацию, размещение команд date в команде tarавтоматически выдает результат, который вы ищете.

tar -cvzf somezipfile_$(date -d "last month"%b%y).tar.gz somelogfile_**$(date -d "last month" +%b)** --remove-files

Последняя существующая проблема - это планирование, которое можно решить с помощью cron.Приведенный ниже оператор будет запускаться /bin/foobar 5-го числа каждого месяца при добавлении в файл crontab.(crontab -e для редактирования файла crontab)

0 0 5 * * /bin/foobar

Комбинируя все вместе, вы получаете:

0 0 5 * * /bin/tar -cvzf somezipfile_$(date -d "last month"\%b\%y).tar.gz somelogfile_**$(date -d "last month" +\%b)** --remove-files

Не забудьте сбежать из% вкронтаб

...