Назад | Перейти на главную страницу

Использование Crontab для архивирования каталога через регулярные промежутки времени

Я хочу использовать tar для каталога через определенные промежутки времени (скажем, каждое утро в 4 часа ночи), поэтому я планировал использовать crontab. Как я могу указать дату в имени файла, например srcdirectorybackup5-30-09.tar, чтобы я мог различать все файлы tar.

ACK!

несколько человек предложили замечательное решение в стиле date +% Y% m% d_% H% M% S, но никто не упомянул главное предостережение "%" в crontabs ...

'%' эквивалентно '\ n', поэтому ваша cronjob, скорее всего, сработает и загадочно выйдет из строя!

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

0 4 * * * tar vcf /path/to/dsttarfile.tar.`date +\%Y\%m\%d_\%H\%M\%S` /path/to/srcdir > /path/to/logfile.log 2>&1

Вы можете рассмотреть возможность использования `date +% w 'как части вашего tar-файла, чтобы у вас был tar-файл для каждого из последних 7 дней, и вам не нужно было беспокоиться об удалении старых копий.

Вам нужны даты в формате ISO - ГГГГ-ММ-ДД. Так они правильно сортируют.

tar -cf srcdirectorybackup`date +%F`.tar /path/to/src

Предполагается, что в пути есть tar и date. Вы можете добавить эту строку в crontab.

Кричалки! ericlaw абсолютно верно. Эти символы% необходимо экранировать, если они используются в файле crontab, иначе они будут интерпретированы как символы новой строки!

Итак, если вы собираетесь поместить эту строку прямо в crontab, экранируйте «%» с помощью «\».

tar -cf srcdirectorybackup`date +\%F`.tar /path/to/src

Репутация действительно должна перейти к Эрикславу ...

предполагая, что вы можете обрабатывать материал crontab, для bash команда будет следующей:

bash -c "tar -cf `date +%F`test.tar foo bar"

Конечно, foo и bar - это файлы, test.tar - это остальная часть суффикса, который вы хотите для файла, и вы можете указать любую нужную опцию :)

Это работает как в cygwin, так и в Linux. Я недостаточно знаком с cron, чтобы знать, нужно ли указывать ему, какую оболочку использовать таким образом.

Во многих дистрибутивах Linux вы должны выполнить следующие шаги:

  1. cronttab -e
  2. В текстовом редакторе введите: 0 4 * * * /home/scripttaringsrc.sh
  3. выйти из редактора, сохранив файлы с помощью ": wq"

Создайте файл /home/scripttaringsrc.sh

tar -cf srcdir 'date +%Y-%m-%d_%Hh%Mm'.tar /path/to/dst

Не забудьте изменить скриптtaringsrc.sh с помощью chmod для выполнения разрешений.

У меня есть этот небольшой скрипт, который упаковывает весь мой каталог etc и сохраняет его в каталоге с правильной датой.

Сохраните этот скрипт и поместите его в /etc/cron.daily/ (если он доступен в вашем dist), поскольку скрипты, находящиеся в этом каталоге, чаще всего выполняются «по одному в день», чаще всего около 4. Однако беглый взгляд в / etc / crontab покажет точную информацию.

#!/bin/sh

date=`date +%Y%m%d-%H%M`
#echo Tid: $date

bpath=/var/backup/computername

cd $bpath/
mkdir sys$date
cd sys$date

datumfil=$bpath/sys$date/$date
> $datumfil

tar -cvzf etc.tar.gz /etc/ > etc.tar.gz.list

md5sum * >  md5sum
ls -lh   >> md5sum

Примечание: вам нужно немного изменить это, чтобы получить "правильное" имя файла, которое вы хотели.

/ Йохан