Правильный формат для динамического имени mysqldump в cron? - PullRequest
6 голосов
/ 20 июля 2009

У меня настроен crontab, который выдает ошибки каждый раз, когда я пытаюсь это сделать. Отлично работает в оболочке. Это формат, который я использую, когда я пытаюсь автоматически вставить дату в имя файла резервной копии базы данных. Кто-нибудь знает синтаксис, который мне нужен, чтобы получить cron, чтобы я мог вставить дату в имя файла?

mysqldump -hServer -uUser -pPassword Table | gzip > 
/home/directory/backups/table.$(date +"%Y-%m-%d").gz

Заранее спасибо!

Ответы [ 2 ]

17 голосов
/ 20 июля 2009

Что-то вроде этого для «командной» части crontab:

mysqldump --host=HOST --user=USER --password=PASSWORD DATABASE TABLE | gzip > /tmp/table.`date +"\%Y-\%m-\%d"`.gz

Что изменилось с OP, так это экранирование формата даты:

date +"\%Y-\%m-\%d"

(И я использовал обратные пометки - но это должно иметь большое значение)

(Другое решение состоит в том, чтобы поместить исходную команду в сценарий оболочки и выполнить ее из crontab вместо команды - возможно, будет легче читать / писать ^^)

0 голосов
/ 20 июля 2009

Наиболее типичная причина «работает в оболочке, но не в cron» заключается в том, что команды, которые вы пытаетесь выполнить, не находятся в PATH. Причина в том, что оболочка вызывается из cron и не загружает те же файлы, что и ваша оболочка входа в систему.

Исправлено: добавление абсолютного пути к каждой команде, которую вы пытаетесь выполнить.

Второе, что я заметил в вашей команде. Синтаксис для запуска вашей команды date выглядит не очень переносимым. Измените его на обратные, или запустите, поместите всю вашу команду в шеллскрипт (также вы можете использовать ее и для задания пути) и выполните этот скрипт из cron ..

EDIT:

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

И пример того, что вы могли бы сделать с помощью шеллскрипта:

Скопировать следующее в /usr/local/bin/dumptable.sh

#!/bin/sh
/usr/bin/mysqldump --host=HOST --user=USER --password=PASSWORD DATABASE TABLE | /bin/gzip > /tmp/table.`/bin/date +"\%Y-\%m-\%d"`.gz

и затем поместите /usr/local/bin/dumptable.sh в cron ..

...