2013-12-25 3 views
3

Я пытаюсь создать cron, который ежедневно создает резервные копии моего подчиненного MySQL. Содержание backup.sh:MySQL dump CronJob

#!/bin/bash 
# 
# Backup mysql from slave 
# 
# 
sudo mysql -u root -p'xxxxx' -e 'STOP SLAVE SQL_THREAD;' 
sudo mysqldump -u root -p'xxxxx' ng_player | gzip > database_`date +\%Y-\%m-\%d`.sql.gz 
sudo mysqladmin -u root -p'xxxxx' start-slave 

Я сделал его исполняемым sudo chmod +x /home/dev/backup.sh и вошел в к crontab по:

sudo crontab -e 

0 12 * * * /home/dev/backup.sh 

, но он не работает, если я работать только в командной строке это работает, но не в crontab.

ИСПРАВЛЕНО: Я использовал сценарий по этой ссылке: mysqldump doesn't work in crontab

+0

Работает ли «sudo /home/dev/backup.sh»? Разве это не проблема доступности? – Saeed

+1

И вместо этого вы можете использовать @daily. поместите эту строку в свой crontab: «@daily /home/dev/backup.sh» – Saeed

+0

/home/dev/backup.sh работает. и в crontab просто поместите эту строку: @daily /home/dev/backup.sh? как я могу это проверить? – lior

ответ

0

использования Try полной ссылки на каталог MySQL бен в .sh файл

пример:

sudo /var/lib/mysql -u root -p'xxxxx' -e 'STOP SLAVE SQL_THREAD;' 
+0

Не работает :( – lior

0

У меня была такая же проблема ,

Я понял, что вы не можете использовать команду sudo в неинтерактивном скрипте. Команда sudo создаст поле, в котором вы должны ввести пароль для своей учетной записи (root).

Если вы вошли в командную строку, например, ssh sudo работает без ввода паролей, но когда другая программа запускает sudo, она запрашивает пароль.

Попробуйте это вместо su команда не требует никаких логинов, и она делает то же самое.

su --session-command="mysql -u root -p'xxxxx' -e 'STOP SLAVE SQL_THREAD;'" root 
su --session-command="mysqldump -u root -p'xxxxx' ng_player | gzip > database_`date +\%Y-\%m-\%d`.sql.gz" root 
su --session-command="mysqladmin -u root -p'xxxxx' start-slave" root 

Замените корень на имя пользователя linux.

EDIT: Посмотрите эту тему для получения другого ответа. https://askubuntu.com/questions/173924/how-to-run-cron-job-using-sudo-command

+0

Это не работает, я получаю: su: непризнанная опция '--session-command = mysql -u root -p'XXX' -e 'STOP SLAVE SQL_THREAD;' ' Использование: su [опции] [LOGIN] – lior

+0

О, это работает для CentOS linux, у вас, вероятно, есть другой. Это будет работать наверняка, но для скрипта требуется ваш пароль 'root'' echo "root_password_goes_here" | sudo -S mysql -u root -p'xxxxx '- e 'STOP SLAVE SQL_THREAD;' 'В этой теме есть больше ответов http://askubuntu.com/questions/173924/how-to-run-cron-job-using-sudo-command – SSpoke

1

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

#!/bin/bash 

/bin/mail -s "test subject" "[email protected]" < /dev/null 

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

+0

i used '42 17 * * */bin/mail -s "test subject" "[email protected]" <"sometext" ', и он не работал – lior

+0

Ну, это было не совсем то, о чем я думал, но интересно. Я думал о том, чтобы положить это в простые три line file, а затем укажите cron в этот файл. –

+0

(Извините, для него это не работает, мой unix - это li ttle ржавый.) Когда я впервые столкнулся с этой проблемой, я потратил дни, чтобы заставить ее работать. Надеюсь, это вам поможет. –

0

Начнем с глупых материалов в сценарии.

Единственная команда, которую вы сделать не запустить через «Судо» является, достаточно spookily, только команда, которую я бы ожидать, что вам может понадобиться запустить через Суда (в зависимости от прав доступа целевого файла) ,

Префикс команд в скрипте sudo без именованного пользователя (то есть работает от имени пользователя root) не служит никакой полезной функции, если вы вызываете скрипт как root.

При типичной установке программы mysql, mysqladmin и gzip обычно выполняются любым пользователем - аутентификация и авторизация команд в СУБД аутентифицируются СУБД с использованием учетных данных аутентификации, переданных в качестве аргументов, поэтому я бы не стал ожидайте, что любая из операций здесь, за исключением, возможно, записи в выходной файл (в зависимости от его разрешений).

Вы не указываете путь для файла резервной копии - может быть, он пишет его где-то иначе, чем вы ожидаете?

(аналогично, вы должны проверить, находится ли какой-либо из исполняемых файлов в месте, которое не находится в $ PATH для среды выполнения crontab).

, но он не работает

.... не сообщение об ошибке.

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