Если я запустил эту команду из оболочки, она будет работать должным образом:
cd ~ && mysqldump --databases --skip-dump-date --host=localhost --user=admin --password=xxxxx --lock-all-tables --result-file=xxxxx_dump_tmp.sql mydb && gzip xxxxx_dump_tmp.sql && mv xxxxx_dump_tmp.sql.gz xxxxx_dump_`date +"%Y-%m-%d__%H.%M.%S"`.sql.gz
Однако, если я настрою задание cron с той же командой (скопировано и вставлено), оно выйдет из строя со следующими ошибками (я получаю уведомление по электронной почте):
/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file
В чем дело?
В чем дело?
В соответствии с man 5 crontab
:
«…
«Шестое» поле (оставшаяся часть строки) определяет команду, которую нужно запустить. Вся командная часть строки, вплоть до новой строки или символа%, будет выполняться / bin / sh или оболочкой, указанной в переменной SHELL файла cron. Знаки процента (%) в команде, если они не экранированы с помощью обратной косой черты (), будут заменены на символы новой строки, и все данные после первого% будут отправлены команде как стандартный ввод.
… », Вы просто неправильно написали. Итак, для crontab это должно быть написано как date +"\%Y-\%m-\%d__\%H.\%M.\%S"
Не помещайте такую сложную команду прямо в файл crontab.
Поместите его в скрипт и вызовите скрипт из cron.
По умолчанию cron-jobs запускаются sh
(если не настроено иное). Когда вы просматриваете скрипт, вы можете установить правильную оболочку для использования, поместив #!/bin/bash
или что-то в этом роде в первой строке сценария.
cd ~
чертовски опасно. Это полностью зависит от того, под каким идентификатором пользователя запущен crontab. Не обязательно ваш собственный идентификатор пользователя!
Так что используйте cd ~userid
.
Если cron работает от имени другого пользователя, может ли этот пользователь получить доступ к вашему домашнему каталогу? И этот пользователь находится в той же среде, что и ваша учетная запись? Также 4.
cron-jobs запускаются без загрузки нормальной среды. Итак, много обычных переменных среды (например, $PATH
) не существуют или содержат ограниченную информацию. Это может привести к сбою программ, вызываемых из cron. См. Также пункт 1. Возможно, вам придется явно вызвать свой .bashrc (или любой другой сценарий запуска, который вы обычно используете), чтобы настроить правильную среду для всего, что вы добавляете в сценарий, называемый cron.