The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"не отрабатывает оператор for, если пускать скрипт по крону"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"не отрабатывает оператор for, если пускать скрипт по крону"  +/
Сообщение от panoff email(ok) on 16-Май-10, 04:35 
имеем:
FreeBSD 8.0 и sh скрипт для бекапа mysql и файлов

задача: раз в сутки по крону бекапить базы и файлы и акуратно складывать в папки

проблема: скрипт прекрасно работает, если запускать самому, работает из под рута и из под простого юзера backup, но при добавление в крон, скрипт упорно отказывается входить в оператор for, как раз таки где и происходит бекап баз. Изголялся с кроном уже, как мог, запускал от разных юзеров, дописывал PATH и SHELL
все равно одно и то же.
Папка $DIR/$DAY создается и в ней появляется files_backup.tgz, но вот дампы не делаются, по причине того, что цикл for не отрабатывает...
Сначала думал, что касячит вызов функции backup_mysql, пробовал без использования функции, но при этом функция backup_files всегда отрабатывала

ниже привожу листинг скрипта, ткните носом, где ошибся, у меня глаз уже замылился, кучу времени убил на эту ерунду, самому стыдно...
за основу брался этот скрипт http://www.cyberciti.biz/tips/how-to-backup-mysql-databases-...

#!/bin/sh

WORKDIR='/root/backup'
DIR='/home/backup/files'
DAY=`date +%F`


TEST=`ls -l $DIR | grep $DAY | wc -l`

if [ $TEST = 0 ];.
then
mkdir $DIR/$DAY
fi

### MySQL Setup ###
MUSER="dump"
MPASS="password"
MHOST="localhost"

### Where is BIN files ###
MYSQL=`which mysql`
MYSQLDUMP=`which mysqldump`
GZIP=`which gzip`
TAR=`which tar`
FIND=`which find`
RMDIR=`which rmdir`

DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases' | grep -v 'information_schema' | grep -v 'mysql')"

backup_mysql ()
{
for db in $DBS;
do
  dbDAY=`date +%H-%M`
  FILE=$DIR/$DAY/$db-$dbDAY.sql.gz
  $MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS --database $db | $GZIP -1 > $FILE
done
}


backup_files ()
{
LIST=`cat $WORKDIR/backup_list`
FOLDER=`$TAR -czf $DIR/$DAY/files_backup.tgz $LIST`
}

backup_mysql
backup_files

$FIND $DIR/* -type d -mtime +7 -exec $RMDIR -R {} \;

cron
0 6 * * * /root/backup/backup.sh > /dev/null 2>&1

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "не отрабатывает оператор for, если пускать скрипт по крону"  +/
Сообщение от теоретик on 16-Май-10, 07:13 
а переменная $DBS не пустая перед входом в цикл (из под крона) ?
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "не отрабатывает оператор for, если пускать скрипт по крону"  +/
Сообщение от ктото on 16-Май-10, 09:19 
>а переменная $DBS не пустая перед входом в цикл (из под крона)
>?

Конечно пустая. Не прописан путь к grep.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "не отрабатывает оператор for, если пускать скрипт по крону"  +/
Сообщение от panoff email(ok) on 16-Май-10, 16:28 
>>а переменная $DBS не пустая перед входом в цикл (из под крона)
>>?
>
>Конечно пустая. Не прописан путь к grep.

вы попали в точку, переменная DBS пустая
я добавил в свой скрипт
GREP=`which grep`

DBS=`$MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases' | $GREP -v 'information_schema' | $GREP -v 'mysql'`

результат то же...

потом опытным путем я выяснил, что переменная DBS пустая даже если сделать так
DBS=`$MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases'`

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

спасибо

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

4. "не отрабатывает оператор for, если пускать скрипт по крону"  +/
Сообщение от ктото on 16-Май-10, 17:10 
>я добавил в свой скрипт
>GREP=`which grep`

ну и про $MYSQL то же самое. А как узнать путь к which? Сейчас не могу проверить, но по идее прописывание в начало скрипта
PATH=/sbin:/usr/sbin:/bin:/usr/bin
должно решить вашу проблему.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

5. "не отрабатывает оператор for, если пускать скрипт по крону"  +/
Сообщение от panoff email(ok) on 16-Май-10, 23:28 
>>я добавил в свой скрипт
>>GREP=`which grep`
>
>ну и про $MYSQL то же самое. А как узнать путь к
>which? Сейчас не могу проверить, но по идее прописывание в начало
>скрипта
>PATH=/sbin:/usr/sbin:/bin:/usr/bin
>должно решить вашу проблему.

вобще странная ерунда творится...
по идее если говорить о пути к grep, то ошибка должна возникнуть еще в самом начале скрипта, когда определяется наличие папки, но все проходит нормально и папка всегда создается
TEST=`ls -l $DIR | grep $DAY | wc -l`

если попробывать ваш вариант прописать PATH=/sbin:/usr/sbin:/bin:/usr/bin
то скрипт вобще отказывается дампить БД даже при запуске из консоли, при этом архивирование файлов проходит удачно...
мне кажется весь затык здесь
DBS=`$MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases' | $GREP -v 'information_schema' | $GREP -v 'mysql'`

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

6. "не отрабатывает оператор for, если пускать скрипт по крону"  +/
Сообщение от ктото on 17-Май-10, 00:30 
>если попробывать ваш вариант прописать PATH=/sbin:/usr/sbin:/bin:/usr/bin
>то скрипт вобще отказывается дампить БД даже при запуске из консоли, при
>этом архивирование файлов проходит удачно...

Забыл что в FreeBSD несистемные бинарники лежат в /usr/local. Тогда можно попробовать так:
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

7. "не отрабатывает оператор for, если пускать скрипт по крону"  +/
Сообщение от panoff email(ok) on 17-Май-10, 01:26 
>>если попробывать ваш вариант прописать PATH=/sbin:/usr/sbin:/bin:/usr/bin
>>то скрипт вобще отказывается дампить БД даже при запуске из консоли, при
>>этом архивирование файлов проходит удачно...
>
>Забыл что в FreeBSD несистемные бинарники лежат в /usr/local. Тогда можно попробовать
>так:
>PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin

проблема решилась простым прописыванием абсолютных путей к файлам

MYSQL='/usr/local/bin/mysql'
MYSQLDUMP='/usr/local/bin/mysqldump'
GZIP='/usr/bin/gzip'
TAR='/usr/bin/tar'
FIND='/usr/bin/find'
RMDIR='/bin/rmdir'
GREP='/usr/bin/grep'

спасибо за помощь, будет для меня уроком...

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

8. "не отрабатывает оператор for, если пускать скрипт по крону"  +/
Сообщение от Andrey Mitrofanov on 17-Май-10, 10:21 
Мужики-то не знают http://www.google.ru/search?q=cron+sh+path+site%3Aopenn...
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Слёрм
Inferno Solutions
Hosting by Ihor
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2019 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру