Автор Тема: 2 вопроса  (Прочитано 7668 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
2 вопроса
« Ответ #15 : 11 Июля 2003, 15:58:03 »
Цитировать
Wyclef:
Для начала, у тебя есть доступ к crontab?

посмотрел, пишет что есть :)
но я им пользоватся вообще не умею (и даже не слышал о нем) :(
а средствами Perl это сделать можно?
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
2 вопроса
« Ответ #16 : 14 Июля 2003, 09:29:26 »
Цитировать
посмотрел, пишет что есть

Как реализовать (с крон\'ом):

Допустим адреса юзеров и письма (отправленные и которые нужно отправить) хранятся в БД. У записи в БД, у письма есть поле "sent", которое отражает было письмо уже отправлено или еще нет. Допустим, его значения: 0 (по-умолчанию) - еще не отправлено, 1 (или текущее время) - уже отправлено.

1. Пишешь скрипт (назовем его mail_queue.pl), который обращается к БД, "забирает" список писем у которых sent = 0. Если есть такие письма, забирает список пользователей, которым эти письма нужно отправить и в цикле, каждому из пользователей их отсылает, если нет - просто завершается. После того как он отправит каждое из писем, для него устнавливается sent отличным от нуля (см. выше).

2. Модифицируешь скрипт, отрывок которого ты привел. В функции add реализуешь простое добавление в БД записи, с телом письма, которое позже нужно будет отправить юзерам (поле sent у него устанавливаешь равным 0). Также, в выводе функции вместо print "Ok!"; - можешь написать print "Письмо сохранено. Через несколько минут оно будет отправлено адресатам"; в зависимости от того, с какой периодичностью крон\'ом у тебя будет запускаться скрипт mail_queue.pl.

3. Добавляешь в crontab, например, такую строку (параметры посмотри в man\'e):
#minute    hour    mday    month    wday    command
*/10       *       *       *        *       /local_path/to_script/queue_mail.pl


Т.е. скрипт mail_queue.pl будет запускаться с интервалом в 10 минут, каждый день.

Допустим за 10 минут скрипт queue_mail.pl не успел отправить все письма (полностью отработать), а крон его еще раз запустил, скрипт возьмет те письма, которые еще не отправлены, но которые уже в работе у предыдущего сеанса (возможно даже в данный момент отсылаются) - в итоге он их может 2 раза отправить. Чтобы такого не было используй "lock/unlock tables".

Таким образом, произойдет как бы разделение труда ;) Работа по добавлению писем будет осуществляться пользователем через браузер, а их отправка будет происходить на стороне сервера и никак его не затронет.

В кратце вроде так, если где-то напутал - укажите. ;)

-----

Цитировать
но я им пользоватся вообще не умею

...проще некуда - это типа "планировщик заданий" под unix
man crontab - там все описано и с примерами.

Цитировать
а средствами Perl это сделать можно?

На бесплатном хостинге, где скрипты нельзя было запускать по расписанию, я запускал скрипт вставляя на страницу код рисунка: http://some.url/cgi-bin/script.pl" width="1" height="1"> - его вывод мне был не важен (скрипт запустится и отработает при посещении странцы где расположен этот код, даже если в процессе загрузки "этого рисунка :)" нажать в браузере "Стоп").

На cpan\'e кажется видел модуль - "заменяюший" crontab - позволяет запускать скрипты по времени, без крон\'а.

Удачи!
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
2 вопроса
« Ответ #17 : 14 Июля 2003, 19:50:56 »
Wyclef  
спасибо тебе огромное за науку.
но ни один из вариантов полностью не подходит((
кстати, я тут вот что попробовал:
написал в этом списке 70 своих ящиков, и отработал скрипт как надо и достаточно быстро (в среднем за 5 сек, но это может быть погрешность на мою связь), из чего получается, что скрипт тормозит только в том случае, когда адрееса в списке неверные...
или я не прав?
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28