У меня это в моем crontab
0 3 * * * mysqldump --host=10.100.100.3 --user=username --password=mypass --routines DBName | gzip > /tmp/mysqldumps/mydb.`date +"\%Y-\%m-\%d"`.gz
теперь мне нужно создать другое задание cron для выполнения этого сценария, предполагая, что мы находимся 3 мая 2011 года. Я хочу удалить файл, который был создан месяц назад т.е. rm mydb.2011-04-03.gz
Есть идеи, как сгенерировать это задание cron (как сгенерировать имя удаляемого файла)?
У вас есть несколько вариантов; Предлагаю два из них:
Удалите файл по дате (каждый день в каталоге назначения будет производиться поиск файлов старше одного месяца, и совпадения будут удаляться):
10 3 * * * find /tmp/mysqldumps/ -maxdepth 1 -ctime +30 -exec rm {} \;
Удалите файл по имени:
10 3 * * * rm /tmp/mysqldumps/mydb.`date -d "last month" +'%Y-%m-%d.gz'`
Я предпочитаю первый, потому что он более надежный. Также, если задание удаления cron по какой-то причине в один прекрасный день не запускается, на следующий день предыдущая команда сделает свое дело. В моем втором примере файл не будет удален.
Вместо анализа имени файла вы также можете проверить время изменения файла.
Следующая команда смотрит в /tmp/mysqldumps
каталог. Имена файлов, начинающиеся с mydb.
и заканчивая .gz
, старше 30 дней удаляются.
find /tmp/mysqldumps -name 'mydb.*.gz' -mtime +30 -exec rm {} \;
Вы можете удалить файлы старше, например, 30 дней с помощью команды типа
rm -f `find /tmp/mysqldumps -mtime +30 -name mydb.\*.gz`