URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 90659
[ Назад ]

Исходное сообщение
"Время жизни perl процесса"

Отправлено SergeyKa , 30-Дек-10 11:40 
Написан скрипт на Perl, который разбирает поступающие письма и помещает данные из вложений в базу mysql. В одном месте скрипта необходимо установить задержку выполнения на 14 часов.
Поставил команду sleep 50400, и всё бы хорошо, но скрипт через какое то время завершается системой.

команда top
  PID USERNAME  THR PRI NICE   SIZE    RES STATE    TIME   WCPU COMMAND
22270 mailnull        1   8    0 56252K 55536K nanslp   0:04  0.00% perl

ps axu | grep perl:
mailnull   22270  0.0  1.8 56252 55536  p0  I+   11:36AM   0:04.03 /usr/local/bin/perl /usr/local/cgi/price/mail_price.pl


Содержание

Сообщения в этом обсуждении
"Время жизни perl процесса"
Отправлено Stell , 30-Дек-10 15:21 
А кто запускает этот скрипт, непосредственно MTA? Тогда скорее всего MTA его и прибивает по какому-то таймауту, надо его доки читать.
Варианты решения:
1) Крутить MTA
2) Форкать скрипт, папу убивать, дочка отвязанная от родителя будет жить сколько захочет.
3) Варианты 1 и 2 - ИМХО костыли, ибо тупо ждать 14 часов - это неправильно. Я бы менял архитектуру, например скидывать данные в очередь с датой поступления, и по крону проверять.


"Время жизни perl процесса"
Отправлено SergeyKa , 30-Дек-10 16:54 
> А кто запускает этот скрипт, непосредственно MTA? Тогда скорее всего MTA его
> и прибивает по какому-то таймауту, надо его доки читать.
> Варианты решения:
> 1) Крутить MTA
> 2) Форкать скрипт, папу убивать, дочка отвязанная от родителя будет жить сколько
> захочет.
> 3) Варианты 1 и 2 - ИМХО костыли, ибо тупо ждать 14
> часов - это неправильно. Я бы менял архитектуру, например скидывать данные
> в очередь с датой поступления, и по крону проверять.

Совершенно верно - MTA exim запускает
Второй вариант нравится меньше всего
Третих вариантов куча, но думал до этого не дойдёт...

Самый простой способ запускать по крону проталкивающий скрипт :)


Спасибо за помощь! С наступающим :)


"Время жизни perl процесса"
Отправлено Andrey Mitrofanov , 31-Дек-10 12:13 
>> А кто запускает этот скрипт, непосредственно MTA? Тогда скорее всего MTA его
>> и прибивает по какому-то таймауту, надо его доки читать.
>> Варианты решения:
>> 2) Форкать скрипт, папу убивать, дочка отвязанная от родителя будет жить сколько
>> захочет.
> Совершенно верно - MTA exim запускает
> Третих вариантов куча, но думал до этого не дойдёт...

Четвёртый - поробовать пускать скрипт nohup -ом.

> Самый простой способ запускать по крону проталкивающий скрипт :)

Не факт, что у "детей капитана Крона" время жизни не ограничено _ещё _больше...

> Спасибо за помощь! С наступающим :)

Пасиб! Всех с! :))


"Время жизни perl процесса"
Отправлено PavelR , 09-Янв-11 10:08 
>> Самый простой способ запускать по крону проталкивающий скрипт :)
> Не факт, что у "детей капитана Крона" время жизни не ограничено _ещё
> _больше...

Эхх, праздники-то сказываются =)



"Время жизни perl процесса"
Отправлено Andrey Mitrofanov , 31-Дек-10 12:27 
> Написан скрипт на Perl, который разбирает поступающие письма и помещает данные из
> вложений в базу mysql. В одном месте скрипта необходимо установить задержку
> выполнения на 14 часов.
> Поставил команду sleep 50400, и всё бы хорошо, но скрипт через какое
> то время завершается системой.

И кстати, про "менять архитектуру":
at ... $(date -d "+14 hours")

Ну, или очередь, демон, сканирующий (костыль: прикрутить к сканированию очереди самим exim-ом или типа того) раз в N-цать минут-седунд на предмет "созревших" файлов-писем и т.д. ... Вот такой энтерпрайзный энрерпрайз.

NAME
       at,  batch,  atq, atrm - queue, examine or delete jobs for later execu-
       tion

SYNOPSIS
       at [-V] [-q queue] [-f file] [-mldbv] TIME
       at -c job [job...]
       atq [-V] [-q queue]
       atrm [-V] job [job...]
       batch
...


"Время жизни perl процесса"
Отправлено SergeyKa , 09-Янв-11 09:00 
>[оверквотинг удален]
> atrm - queue, examine or delete jobs for later execu-
>        tion
> SYNOPSIS
>        at [-V] [-q queue] [-f
> file] [-mldbv] TIME
>        at -c job [job...]
>        atq [-V] [-q queue]
>        atrm [-V] job [job...]
>        batch
> ...

На самом деле задача проще.
Просто есть поставщик, который отправляет ну ОООЧень большой прайс и делает это днём в самый разгар работы. При подгрузке этого прайса система блокирует таблицы во избежание ошибок и стоит задача отсрочить подгрузку до нерабочего времени, например в 1 час ночи.
соответственно проще запустить по крону ещё один скрипт, который при наличии свежего прайса во временной таблице - перенесёт его в рабочую базу :)