Правилен формат за динамично име на файл 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"

(И използвах обратни точки - но това би трябвало да има голяма разлика)

(Друго решение би било да поставите оригиналната си команда в shell-скрипт и да изпълните тази от crontab, вместо командата -- вероятно ще бъде по-лесно за четене/запис ^^)

person Pascal MARTIN    schedule 20.07.2009
comment
Като странична бележка: почти винаги използвам дълги опции, така че командата е по-лесна за разбиране/промяна от някой, който не използва често инструменти на командния ред - person Pascal MARTIN; 20.07.2009
comment
По някаква причина трябваше да премахна наклонените черти за моя пример. Благодаря за това все пак. :3 - person r109; 30.07.2013

Най-типичната причина за "работи в shell, но не и в cron" е, че командите, които се опитвате да изпълните, не са в PATH.. Причината е, че shell, извикан от cron, не зарежда същите файлове като вашия shell за влизане.

Поправка: добавете абсолютен път към всяка команда, която се опитвате да изпълните.

Второто нещо, което забелязвам във вашата команда. Синтаксисът за изпълнение на вашата команда за дата изглежда не е много преносим. Променете това, за да бъде в обратни точки, или изпълнете поставете цялата си команда в shellscript (също така, можете да го използвате, за да зададете и своя път) и изпълнете този скрипт от cron..

РЕДАКТИРАНЕ:

По време на писането на първоначалния ми отговор моята клавиатурна подредба нямаше обратни отметки, така че проверете какво е написал Паскал.

И пример за това какво можете да направите с shellscript:

Копирайте следното в /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