it-swarm-ru.tech

Использование системной даты / времени в Cron Script

Я настраиваю Cronjob, который будет резервировать базу данных MySQL, которая есть на моем сервере, но я не хочу, чтобы она продолжала перезаписывать один и тот же файл снова и снова. Вместо этого я хочу иметь массив резервных копий на выбор, сделанный автоматически. Например:

## Cronjob, run May 21st, 2011:
mysqldump -u username -ppasword database > /path/to/file/21-03-2011.sql

## SAME Conjob, run May 28th, 2011:
mysqldump -u username -ppasword database > /path/to/file/28-03-2011.sql

И так далее.

Можно ли использовать системную дату и/или время в качестве некоторой переменной в моем Cronjob? Если нет, что вы предлагаете сделать то же самое?

38
AeroCross

Вы можете попробовать что-то вроде этого (как отмечает Гленн Джекманн ниже, вы должны избежать всех % персонажи):

15 11 * * * touch "/tmp/$(date +\%d-\%m-\%Y).sql"

Чтобы узнать, будет ли ваш конкретный cron запускать команду из crontab как скрипт сам по себе, или вам нужно написать скрипт, который вычисляет дату в виде строки, а затем запускает команду mysqldump.

Не Результатя из %, "cron" в Redhat Enterprise Linux 5.0 (я думаю) продолжал выдавать мне ошибки о том, что не найдено соответствия ). Это потому, что все после того, как не покинул % отправляется на стандартный ввод команды.

Я также принял бы рекомендацию использовать формат даты ISO8601 (гггг-мм-дд, то есть %F) чтобы упорядочить имена файлов по дате при лексической сортировке.

46
Bruce Ediger

Вы должны быть в состоянии использовать date.
Тип info date или man date для деталей.

Вам может подойти что-то вроде следующего (измените формат даты в соответствии с вашими потребностями)

yourcommand > filepathandnameprefix$(date +"\%d-\%m-\%Y").extension
7
asoundmove

Для того, чтобы такая команда работала должным образом, мы должны экранировать% , и тогда она будет работать как положено.

См .: http://www.ducea.com/2008/11/12/using-the-character-in-crontab-entries/

4
Édouard Lopez

Вот скрипт bash, который я использовал:

#!/bin/bash
mysqldump -u user1 -p DatabaseName | gzip > BackupFolder/backup`date +%F_%T`.sql.gz

Файлы выглядят так:

backup2011-03-02_15:16:46.sql.gz

Направьте работу cron на это, чтобы бегать по ночам или как угодно.

1
user5319

Напишите небольшой скрипт-обертку, который использует команду date и ​​вызывает вашу команду резервного копирования.

#!/bin/bash
NOW=`/bin/date +"%m%d%Y-%H%M%S"`
if [[ "$?" != "0" ]]; then
 NOW="UNKNOWN_DATE"
 fi
mysqldump -u username -ppassword database > /path/to/file/$NOW.sql
if [[ "$?" != "0" ]]; then
 echo "$0: backup failed with error code $?"
 fi
0
LawrenceC