31

эм а если в кроне просто указать команду бекапа :

 Консоль:
*/5 * * * *  mysqldump -uroot -h localhost -pпароль_рута 1baz > /home/rassol2/1bz.sql

а есче варинт попробуй изменить юзера с рута на другого

Спросить - стыд минуты, не узнать - стыд всей жизни

32

Rassol2 пишет:

там об ошибку выполнения не сообщает. Уже и не знаю что делать ac

Логгером пользуйся. Бери код ошибки после каждой команды и направляй его логгером в /var/log/messages.
и смотри что пишет. А напишет он тебе, скорее всего, что запускаемый процесс не найден. Не тождественны поисковые пути запуска при запуске из крона и при запуске из консоли.

33 (18.02.2014 14:23:29 отредактировано lone_wolf)

Cruiser78,  прав, надо указывать полный путь до скрипта запуска утилиты:

 Консоль:
/usr/bin/find /home/zbackup/mysql/ -mtime +3 -print -mindepth 1 -delete >/dev/null 2>&1

ну и по mysqldump так же, только я путь точный не знаю так как у меня его нету на десктопе

Спросить - стыд минуты, не узнать - стыд всей жизни

34 (18.02.2014 14:57:44 отредактировано Rassol2)

 Консоль:
*/5 * * * *  mysqldump -uroot -h localhost -pпароль_рута 1baz > /home/rassol2/1bz.sql

так создается, благо.

А вот по поводу полного пути не совсем понял.

 Консоль:
#!/bin/bash
#префикс c датой, чтобы знать от какого числа бэкап
DATE=`date +%F`
#указываем директорию по умолчанию
DIR=/home/zbackup/mysql2/$DATE
#делаем автоочистку мусора, допустим вам надо хранить старые бэкапы только 3 дня.
/usr/bin/find /home/zbackup/mysql/ -mtime +3 -print -mindepth 1 -delete >/dev/null 2>&1
#указываем какую базу вам нужно бэкапить
mysqldump -uroot -h localhost -p1234 mys1 > $DIR\_mys1.sql

но в таком случаи еще нужно указать путь до "оболочки" ну или как то так он называется.
*/5 * * * * /bin/bash /etc/.rassol2/mysql_backup.sh

Никогда не бойся делать то, что ты не умеешь. Помни, "КОВЧЕГ" был построен ЛЮБИТЕЛЕМ. ПРОФЕССИОНАЛЫ построили "ТИТАНИК"

35

попробуй вот так

 Консоль:
#!/bin/bash
#префикс c датой, чтобы знать от какого числа бэкап
DATE=`date +%F`
#указываем директорию по умолчанию
DIR=/home/zbackup/mysql2/$DATE
#делаем автоочистку мусора, допустим вам надо хранить старые бэкапы только 3 дня.
/usr/bin/find /home/zbackup/mysql/ -mtime +3 -print -mindepth 1 -delete >/dev/null 2>&1
#указываем какую базу вам нужно бэкапить
/usr/bin/mysqldump -uroot -h localhost -p1234 mys1 > $DIR\_mys1.sql

Спросить - стыд минуты, не узнать - стыд всей жизни

36

все спасибо, теперь работает.
+

Никогда не бойся делать то, что ты не умеешь. Помни, "КОВЧЕГ" был построен ЛЮБИТЕЛЕМ. ПРОФЕССИОНАЛЫ построили "ТИТАНИК"

37

Rassol2 пишет:

все спасибо, теперь работает.
+

теперь работает это когда вот так все выглядит ?

 Консоль:
0 4 * * * /etc/.rassol2/mysql_backup.sh

 Консоль:
#!/bin/bash
#префикс c датой, чтобы знать от какого числа бэкап
DATE=`date +%F`
#указываем директорию по умолчанию
DIR=/home/zbackup/mysql2/$DATE
#делаем автоочистку мусора, допустим вам надо хранить старые бэкапы только 3 дня.
/usr/bin/find /home/zbackup/mysql/ -mtime +3 -print -mindepth 1 -delete >/dev/null 2>&1
#указываем какую базу вам нужно бэкапить
/usr/bin/mysqldump -uroot -h localhost -p1234 mys1 > $DIR\_mys1.sql

Спросить - стыд минуты, не узнать - стыд всей жизни

38

lone_wolf пишет:

только я путь точный не знаю

 Консоль:
$ which mysqldump
/usr/bin/mysqldump

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

39

как я понимаю для анакрон тоже нужно учитывать полный путь к mysqldump ?

Никогда не бойся делать то, что ты не умеешь. Помни, "КОВЧЕГ" был построен ЛЮБИТЕЛЕМ. ПРОФЕССИОНАЛЫ построили "ТИТАНИК"

40

Rassol2 пишет:

как я понимаю для анакрон тоже нужно учитывать полный путь к mysqldump ?

конечно  bs

Спросить - стыд минуты, не узнать - стыд всей жизни

41 (21.02.2014 12:47:16 отредактировано Cruiser78)

Rassol2 пишет:

как я понимаю для анакрон тоже нужно учитывать полный путь к mysqldump ?

Типичная ошибка начинающего системного администратора - полагать, что поисковые пути отлиты из бронзы и всегда одинаковы для всех программ, процессов. Это не так. Все, что запускается при инициализации системы имеет минимальный (если вообще имеет) набор поисковых путей. А вот для запущенной консоли перечень поисковых путей сильно больше. Именно поэтому то, что отлажено в консоли, не всегда отрабатывает из планировщика заданий.  Чтобы в этом убедиться, можно дать команду:

 Консоль:
$echo $PATH

из консоли и сделать аналогичное из крона, если не путаю - так:

* * * * * logger -t TestPATH `echo PATH is $PATH` 

Разница будет очевидна.
Вывод:
Для того чтобы процессы запускались из "кроновского" скрипта необходимо его научить искать внешние программы там, где они лежат. То есть - выбрать для себя один из почти равнозначных вариантов:
1. Использовать полные пути к запускаемым программам. Недостаток - слабая переносимость (вдруг эти пути изменятся по какой либо причине?). Замумукаешься корректировать скрипт на тыщу строк. А если он не один?
2. Установить переменную PATH с нужными нам путями в запускаемом скрипте в одной из первых строк. Недостаток - тот же, но лечится изменением только в одном месте скрипта, а не коррекцией всего скрипта на тыщи строк.
3. Установить переменную PATH непосредственно в конфигурационном файле крона (с помощью "crontab -e"). Тогда все кроновские задачи получат именно этот наш PATH, ну и модифицируют его, если им это надо будет.  Это обеспечит максимальную переносимость твоих скриптов и минимальный гимор при их настройке, привязке к конкретному хосту.

42

Cruiser78 пишет:

3. Установить переменную PATH непосредственно в конфигурационном файле крона (с помощью "crontab -e"). Тогда все кроновские задачи получат именно этот наш PATH, ну и модифицируют его, если им это надо будет.  Это обеспечит максимальную переносимость твоих скриптов и минимальный гимор при их настройке, привязке к конкретному хосту.

а во с этого места было было бы не плохо поподрповней в виде примеров  bs

Спросить - стыд минуты, не узнать - стыд всей жизни

43

Удобно через переменные + which в скриптах:

MYSQL="/usr/bin/mysql"
IPT=$(which iptables)
$MYSQL ....
$IPT
История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

44

lone_wolf пишет:

а во с этого места было было бы не плохо поподрповней в виде примеров  bs

А чего там подробнее? Все же очевидно. Вот кусочек одного из моих кронтабов:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/root

#minute hour day month dayofweek   command
0   8 * * *  (cat /proc/mdstat; /usr/sbin/smartctl -a /dev/sda; /usr/sbin/smartctl -a /dev/sdb; ) | mail -s "Tom SMART report" root

То есть, можно установить любые нужные переменные, которые воспримутся всеми запускаемыми из крона скриптами.

45

zenon пишет:

Удобно через переменные + which в скриптах:

MYSQL="/usr/bin/mysql"
IPT=$(which iptables)
$MYSQL ....
$IPT

При этом надо понимать, что which не равен find и ищет программу только по поисковым путям. Если в $PATH он её не найдет, то увы... А если найдет, то запись IPT=$(which iptables) будет работать совершенно так же, как и IPT=iptables :-) То есть, по $IPT будет вызван тот же самый iptables.

46

аха ясно тоесть получается имеется виду обьявление переменной, я правильно понял ?

PATH=/sbin:/bin:/usr/sbin:/usr/bin
Спросить - стыд минуты, не узнать - стыд всей жизни

47

lone_wolf пишет:

аха ясно тоесть получается имеется виду обьявление переменной, я правильно понял ?

PATH=/sbin:/bin:/usr/sbin:/usr/bin

Да, именно так. Я просто объявил переменную PATH, которая будет работать во всех запускаемых кроном скриптах. Туда еще можно первым номером вписать /usr/local/bin если оно нужно (например, перебить своим скриптом, который там будет лежать, стандартный, из /usr/bin'а)...

48

zenon пишет:

which в скриптах:

делить на ноль нельзя.  Если можно which command, то можно и просто command.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

49

lone_wolf пишет:

PATH=/sbin:/bin:/usr/sbin:/usr/bin

ну типа того. Но лучше сделать так

if [ -z "$PATH" ]
  PATH=/sbin:/bin:/usr/sbin:/usr/bin
fi

т.к. crond НЕ устанавливает PATH

Nor does it do any special environment handling.  A shell script is better-suited  to  doing
       that  than  a  cron daemon.  This cron daemon sets up only four environment variables: USER,
       LOGNAME, HOME, and SHELL.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

50

что нужно дописать в задачу крон что бы он писал лог выполнения ?
А то есть некоторые вопросы.

Никогда не бойся делать то, что ты не умеешь. Помни, "КОВЧЕГ" был построен ЛЮБИТЕЛЕМ. ПРОФЕССИОНАЛЫ построили "ТИТАНИК"

51

Rassol2 пишет:

что нужно дописать в задачу крон что бы он писал лог выполнения ?

сколько раз повторять-то?

* * * * * /root/script.sh >>/var/log/script.log 2>&1
Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

52

Есть один сайт, до этого бекапы мускула на нем не делал, тут решил делать через крон, но:

 Консоль:
mysqldump -u USER -pPASSWORD DATABASE > /path/to/file/dump.sql

От рута выдает ошибку 1045, ошибка доступа, запускаю от юзера мускула, работает но долго идет бекап (база толстая, около 500 м/байт).
Как ускорить?

53

Хм, если делать бекап в каталог  сайта то работает быстро  bw