Проблема с выполнением задачи в cron'е

Обсуждаем OS FreeBSD и сервисы на ней.

Проблема с выполнением задачи в cron'е

Сообщение Alexam » 09 окт 2012, 09:55

Проблема с выполнением задачи в cron.
Потырил и немного переделал вот такой скрипт для бекапа базы данных:
#!/bin/sh
# это нужно сменить, если какой-либо из параметров поменяется. Например при плановой замене пароля.
export DB_BACKUP="/usr/home/alexam/backups/" #Указать каталог для баз
#export DB_USER="root" # Указать пользователя, от которого будет идти бэкап
#export DB_PASSWD="qweqwe" # Указать пароль этого пользователя
# название и версии бэкапов. Тут же - глубина бэкапов. Чем больше строк "mv $DB_BACK..." тем больше бэкапов сохранится. При каждом
# срабатывании скрипта бэкапы перемещаются в сл. папку, а последний - удаляется.
echo ""
echo "* Идет бэкап, можете покурить, попить чаю или поиграть в косынку :)"
rm -rf $DB_BACKUP/04
mv $DB_BACKUP/03 $DB_BACKUP/04
mv $DB_BACKUP/02 $DB_BACKUP/03
mv $DB_BACKUP/01 $DB_BACKUP/02
mkdir $DB_BACKUP/01
echo "* Самый ответственный, нужный и необходимый момент. Спорцменк и комсомолк mysqldump делает свое черное дело..."
echo "----------------------"
mysqldump UTM5 >$DB_BACKUP/01/UTM5-`date +%Y-%m-%d-%H-%M-%S`.sql
# mysqldump --user=$DB_USER --password=$DB_PASSWD -R имя_еще одной базы >$DB_BACKUP/01/имя_еще_одной_базы-`date +%Y-%m-%d-%H-%M-%S`.sql
echo "ready!"
# ls -lah $DB_BACKUP/01/
exit 0

Проблема такая: если вручную его запускать, то всё ОК, но если по cron, то скрипт запускается, файлы в папках BACKUP, если они были созданы, сдвигаются, а новые файлы не создаются. Скрипт поставил на ночь на время, когда других задач по cron нет, а также когда сервер не загружен, время менять пробовал, но всё одно. Куда покопать?
Бекап делается долго, когда вручную запускаю, то минут 25-30, может ли из-за долгого выполнения задачи такой косяк быть?
FreeBSD 7.2-RELEASE-p7
Alexam
новичок
 
Сообщения: 25
Зарегистрирован: 01 мар 2011, 14:22

Re: Проблема с выполнением задачи в cron'е

Сообщение Андрей » 10 окт 2012, 06:00

Alexam писал(а):Проблема такая: если вручную его запускать, то всё ОК, но если по cron, то скрипт запускается, файлы в папках BACKUP, если они были созданы, сдвигаются, а новые файлы не создаются.

Пути абсолютные укажи ко всем исполняемым файлам.

Alexam писал(а):Бекап делается долго, когда вручную запускаю, то минут 25-30, может ли из-за долгого выполнения задачи такой косяк быть?

Бекап делается долго из-за криволапости разработчиков горе биллинга. Об этом можно говорить долго, но сами можете глянуть сколько у вас sql файл весит, примерно объем в 2 раза увеличивайте и узнаете сколько БД в СУБД занимает, ибо нефиг писать каждую транзакцию в БД, но это другая история.
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область

Re: Проблема с выполнением задачи в cron'е

Сообщение Alexam » 10 окт 2012, 13:28

Андрей писал(а):Пути абсолютные укажи ко всем исполняемым файлам.

в скрипте? извиняюсь, не понял, про какие файлы речь :( в cron'e ссылка полностью указана.
По поводу биллинга всё понятно, готовлюсь его сменить со временем, что не отменяет необходимости текущего бэкапа. Вручную делать лениво стало, решил сделать автоматом.
Alexam
новичок
 
Сообщения: 25
Зарегистрирован: 01 мар 2011, 14:22

Re: Проблема с выполнением задачи в cron'е

Сообщение Андрей » 10 окт 2012, 18:41

Alexam писал(а):в скрипте? извиняюсь, не понял, про какие файлы речь

да, в скрипте. Рассмотрим пример:
Код: Выделить всё
$ whereis mv
mv: /bin/mv /usr/share/man/man1/mv.1.gz /usr/src/bin/mv

следовательно mv лежит по пути: /bin/mv, а значит нам надо в скрипте подправить строку(и) до вида:
Код: Выделить всё
/bin/mv $DB_BACKUP/03 $DB_BACKUP/04
/bin/mv $DB_BACKUP/02 $DB_BACKUP/03
/bin/mv $DB_BACKUP/01 $DB_BACKUP/02


Просто окружение cron'а не может найти расположение файла mysqldump. Как найти его я указал ранее.
Если Вам интересен сей парадокс в ОС FreeBSD, то могу объяснить.

ЗЫ. В конце исполняемого файла должна обязательно быть пустая строка (переход на новую строку), в противном случае команда на последней строке останется невыполненной.
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область

Re: Проблема с выполнением задачи в cron'е

Сообщение Alexam » 11 окт 2012, 08:46

Хм...
Так суть в том, что двигание каталогов как раз выполняется, но не создаётся дамп и не кладётся в каталог 01, или создаётся, но не кладётся и пропадает куда-то...
Причем, как я сказал, если вручную backup.sh стартануть, то всё ОК, то есть ошибки в скрипте вроде как нет. При чём ситуация повторилась на другом серваке, более мощном с Free8.2.
Ну если только musqldump...
Но в любом случае поправляю файл по вашему варианту и смотрю, что будет.
Alexam
новичок
 
Сообщения: 25
Зарегистрирован: 01 мар 2011, 14:22

Re: Проблема с выполнением задачи в cron'е

Сообщение Андрей » 11 окт 2012, 12:02

Alexam писал(а):Так суть в том, что двигание каталогов как раз выполняется

Выполняется потому что для крона применимы пути в переменной $PATH.
Легко проверить. Выполним в консоли:
Код: Выделить всё
$ echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin


Теперь пишем скрипт:
Код: Выделить всё
#!/bin/sh
/echo $PATH > /home/USERNAME/1.txt


USERNAME - подставить свое. А потом увидите разницу.

... с тех пор я всегда пишу абсолютные пути.
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область

Re: Проблема с выполнением задачи в cron'е

Сообщение Alexam » 12 окт 2012, 16:38

Спасибо! Всё заработало :)
Alexam
новичок
 
Сообщения: 25
Зарегистрирован: 01 мар 2011, 14:22

Re: Проблема с выполнением задачи в cron'е

Сообщение Андрей » 12 окт 2012, 21:28

яжговорил ))
.ı|ı..ı|ı.
Андрей
местный житель
 
Сообщения: 1028
Зарегистрирован: 14 янв 2009, 13:37
Откуда: Оренбургская область


Вернуться в FreeBSD

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20

cron