Работа unix с MySQL и датой

Модератор: Модераторы разделов

anton4k
Сообщения: 3

Работа unix с MySQL и датой

Сообщение anton4k »

Здравствуйте!
Нужна Ваша помощь. Ситуация такова:
Человек покупает услуги, я создаю ему папку на WWWсервере и заношу его имя в таблицу MySQL.
В столбце "konec" указываю период окончания предоставления услуг, а в столбце "fold" - путь к его личной папке.
С помощью cron ежедневно будет запускаться скрипт, задача которого сверять текущую дату на сервере со столбцом "konec" и если в какой-то ячейке значение даты меньше текущей, то скрипт выполняет действие(переименовывает его личную папку, путь к котрой указан в "fold"). И продолжает перебирать до конца таблицы.

Как реализовать этот самый скрипт?


Если неясно изъяснился, дайте знать. Жду ответа :unsure: :unsure:
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Работа unix с MySQL и датой

Сообщение SLEDopit »

Выбрать все необходимые директории select'ом и переименовать, не?

Код: Выделить всё

mysql database -Ne "select fold from table where konec < CURRENT_TIMESTAMP" | while read dir ; do mv -v "$dir" "$dir"_moved ; done
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
anton4k
Сообщения: 3

Re: Работа unix с MySQL и датой

Сообщение anton4k »

SLEDopit писал(а):
15.09.2013 17:01
Выбрать все необходимые директории select'ом и переименовать, не?

Код: Выделить всё

mysql database -Ne "select fold from table where konec < CURRENT_TIMESTAMP" | while read dir ; do mv -v "$dir" "$dir"_moved ; done

Спасибо большое. Осталось несколько глупых вопросов.
какой формат должен быть у даты в таблице? и полный ли путь прописывать в "fold"?
Вместо "database" писать имя базы? что значит "-Ne"?
И может быть, вместо CURRENT_TIMESTAMP нужно использовать CURRENT_DATE? Ведь скрипт будет выполняться раз в день и проверять должен дату
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Работа unix с MySQL и датой

Сообщение SLEDopit »

anton4k писал(а):
15.09.2013 18:24
какой формат должен быть у даты в таблице?
datetime

anton4k писал(а):
15.09.2013 18:24
что значит "-Ne"?

Код: Выделить всё

       ·   --skip-column-names, -N

           Do not write column names in results.

       ·   --execute=statement, -e statement

           Execute the statement and quit. The default output format is like that produced with --batch. See Section 4.2.3.1,
           “Using Options on the Command Line”, for some examples. With this option, mysql does not use the history file.

anton4k писал(а):
15.09.2013 18:24
Вместо "database" писать имя базы?
да


anton4k писал(а):
15.09.2013 18:24
И может быть, вместо CURRENT_TIMESTAMP нужно использовать CURRENT_DATE?
а какая разница в конечном итоге?
anton4k писал(а):
15.09.2013 18:24
и полный ли путь прописывать в "fold"?
да.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Работа unix с MySQL и датой

Сообщение drBatty »

SLEDopit писал(а):
15.09.2013 17:01
путь к котрой указан в "fold"

тогда уж "papka" (:
SLEDopit писал(а):
15.09.2013 17:01
Выбрать все необходимые директории select'ом и переименовать, не?

ИМХО лучше

Код: Выделить всё

while read dir
do
  mv ...
done <mysql...


PS: даты лучше сравнивать так: http://dev.mysql.com/doc/refman/5.5/en/dat...nction_datediff

тогда любой формат даты подходит.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Работа unix с MySQL и датой

Сообщение drBatty »

PPS вот ещё на хабре пишут: http://habrahabr.ru/post/61391/

банальность, но многие действительно не в курсе.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
anton4k
Сообщения: 3

Re: Работа unix с MySQL и датой

Сообщение anton4k »

drBatty писал(а):
15.09.2013 19:42
ИМХО лучше

Код: Выделить всё

while read dir
do
  mv ...
done <mysql...

Не понял что-то.. чем это отличается? и почему после done "<mysql..."?

Нарвалась мысль. А ведь если папка уже переименовалась в "ххх_moved", то скрипт на следующий день будет снова искать ее по старому пути и пытаться переименовать...
И еще вопрос. если в таблице несколько таких строк, то он обработает все или остановится на первой?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Работа unix с MySQL и датой

Сообщение SLEDopit »

anton4k писал(а):
15.09.2013 20:45
Не понял что-то.. чем это отличается? и почему после done "<mysql..."?
Тем что данные не гонятся через пайп. Полностью конструкция выглядит как:

Код: Выделить всё

while read dir ; do mv -v "$dir" "$dir"_moved ; done < mysql database -Ne "select fold from table where konec < CURRENT_TIMESTAMP"

anton4k писал(а):
15.09.2013 20:45
Нарвалась мысль. А ведь если папка уже переименовалась в "ххх_moved", то скрипт на следующий день будет снова искать ее по старому пути и пытаться переименовать...
Можно добавить проверку на существование директории. Хотя я бы лучше добавил в базу поле, которое было бы индикатором, перемещена ли директория или нет и обновлять его при перемещении директории.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Работа unix с MySQL и датой

Сообщение drBatty »

anton4k писал(а):
15.09.2013 20:45
Не понял что-то.. чем это отличается? и почему после done "<mysql..."?

имелось ввиду засунуть вывод mysql во временный файл, а потом этот файл отправить внутр цикла, в команду read. С самой mysql так не получится (разве-что done < <(mysql...), но это слишком сильное колдунство, и тоже плохо)

anton4k писал(а):
15.09.2013 20:45
Нарвалась мысль. А ведь если папка уже переименовалась в "ххх_moved", то скрипт на следующий день будет снова искать ее по старому пути и пытаться переименовать...

угу. Потому внутри цикла надо ещё и СУБД менять. Вот именно потому я и предлагаю лишнюю сущность. Можно не файл, а bash-массив заюзать, хранить в нём время (ассоциативный, или два простых массива, т.к. ещё надо имя хранить).
anton4k писал(а):
15.09.2013 20:45
И еще вопрос. если в таблице несколько таких строк, то он обработает все или остановится на первой?

в том скрипте, который вам предложили, ничего такого нет. А значит, будет тупо пытаться переименовать всё по 10 раз.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: