Пожалуйста, прости мое невежество. Я искал, но, возможно, я не совсем уверен, что искать, чтобы самому ответить на мой вопрос, поэтому я обращаюсь к этому форуму за небольшим руководством.
Я поднял сервер Ubuntu 12.04.3. Этот сервер в основном работает под управлением MySQL. Я пытаюсь создать работу, которая будет выполнять ежедневный дамп.
Я вошел в систему как мой собственный пользователь, я создал исполняемый файл с именем / home / xyz / MySQL_Dumps / RunMySQLDump
-rwxrwxr-x 1 0 1000 1012 Jan 15 15:26 RunMySQLDump
crontab –l показывает:
12 * * * * /home/xyz/MySQL_Dumps/RunMySQLDump
Содержимое RunMySQLDump:
MyTimeNow=$(date +"%Y%m%e_%H%M")
mysqldump --host=localhost --user=<user> --password=<password>--max_allowed_packet=1G --skip-opt --port=3306 --default-character-set=utf8 --single-transaction=TRUE --dump-date=TRUE --comments --flush-privileges --force --all-databases --result-file=/home/xyz/MySQL_Dumps/$MyTimeNow-X.dump
mysqldump --host=localhost --user=<user> --password=<password> --max_allowed_packet=1G --skip-opt --port=3306 --default-character-set=utf8 --single-transaction=TRUE --dump-date=TRUE --comments --flush-privileges --force --all-databases --result-file=/home/xyz/MySQL_Dumps/$MyTimeNow-Y.dump
mysqldump --host=localhost --user=<user> --password=<password> --max_allowed_packet=1G --skip-opt --port=3306 --default-character-set=utf8 --single-transaction=TRUE --dump-date=TRUE --comments --flush-privileges --force --all-databases --result-file=/home/xyz/MySQL_Dumps/$MyTimeNow-Z.dump
tar -cvf $MyTimeNow-all.tar $MyTimeNow*.dump
gzip *.tar
rm $MyTimeNow*.dump
Итак, вот проблема, с которой я сталкиваюсь. Когда я захожу на сервер под своим собственным пользователем «xyz» и вручную запускаю команду ./ RunMySQLDump , все работает нормально:
/ home / xyz / MySQL_Dumps
-rw-rw-r-- 1 1000 1000 1042848433 Jan 15 14:03 20140114_0310-all.tar.gz
-rw-rw-r-- 1 1000 1000 1065212917 Jan 15 15:18 20140115_1512-all.tar.gz
-rw-rw-r-- 1 1000 1000 1065718672 Jan 15 16:28 20140115_1622-all.tar.gz
-rw-rw-r-- 1 1000 1000 1077965846 Jan 16 11:42 20140116_1136-all.tar.gz
Однако, когда я позволяю cron запускать задание, я получаю следующее: / home / xyz (примечание: НЕ в / home / xyz / MySQL_Dumps И нет данных !)
-rw-rw-r-- 1 xyz xyz 67 Jan 16 16:12 20140116_1612-all.tar.gz
Может кто-нибудь, пожалуйста, указать мне правильное направление?
Спасибо огромное!
Когда вы работаете с ./RunMySQLDump
, рабочий каталог скрипта - /home/xyz/MySQL_Dumps/
, поэтому он работает.
Когда cron
запускает скрипт, его рабочий каталог /home/xyz/
(ваш домашний каталог) находится в пользовательском crontab.
Первые строки в вашем скрипте используют абсолютные пути, последние строки - относительные пути. Вот почему это не удается.
Просто измените рабочий каталог в сценарии, прежде чем начинать использовать относительные пути или лучше в начале сценария:
cd /home/xyz/MySQL_Dumps/
Или используйте абсолютные пути везде в сценарии.