mysqldump cron не может использовать символ>

0

Я пытаюсь использовать задачу задания cron для резервного копирования моей базы данных, но когда я пытаюсь добавить скрипт в задание cron, появляется сообщение об ошибке:

Невозможно установить символ ">"

Это сценарий, который я использую:

mysqldump -u "username" --password='****' --no-create-info --no-tablespaces "username" > /home/"username"/public_html/_backup/db__$(date +\%Y-\%m-\%d_\%H_\%M_\%S).sql

Если я запускаю тот же скрипт через консоль SSH, он создает файл просто отлично, но я не могу создать cron из-за этой ошибки.

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

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

Теги:
cron
cron-task

1 ответ

1
Лучший ответ

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

Теперь у вас есть два варианта:

  1. Используйте конструкцию типа "/bin/sh -c" mysqldump... ", которая, вероятно, вызовет сильную головную боль из-за проблем с цитированием
  2. Сохраните команду в сценарии оболочки (не забудьте сделать ее исполняемым) и выполните скрипт из cron.

У последнего метода есть дополнительное преимущество, что вы можете легко определить точную среду исполнения. cron обычно определяет очень мало переменных окружения, и это может быть болью. Внутри вашего скрипта вы можете указать свой файл $ HOME/.bashrc (или любой другой файл), установить переменную пути и т.д.

  • 0
    Спасибо за ответ. Теперь это работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню