Правильный формат для динамического имени файла mysqldump в cron?

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

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

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


person Mobius    schedule 20.07.2009    source источник


Ответы (2)


Как насчет чего-то подобного для «командной» части crontab:

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

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

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

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

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

person Pascal MARTIN    schedule 20.07.2009
comment
В качестве примечания: я почти всегда использую длинные параметры, поэтому команду легче понять/изменить тем, кто не часто использует инструменты командной строки. - person Pascal MARTIN; 20.07.2009
comment
По какой-то причине мне пришлось удалить косые черты для моего экземпляра. Спасибо за это. :3 - person r109; 30.07.2013

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

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

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

РЕДАКТИРОВАТЬ:

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

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

Скопируйте следующее в /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..

person rasjani    schedule 20.07.2009