Написан скрипт на 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% perlps 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
А кто запускает этот скрипт, непосредственно MTA? Тогда скорее всего MTA его и прибивает по какому-то таймауту, надо его доки читать.
Варианты решения:
1) Крутить MTA
2) Форкать скрипт, папу убивать, дочка отвязанная от родителя будет жить сколько захочет.
3) Варианты 1 и 2 - ИМХО костыли, ибо тупо ждать 14 часов - это неправильно. Я бы менял архитектуру, например скидывать данные в очередь с датой поступления, и по крону проверять.
> А кто запускает этот скрипт, непосредственно MTA? Тогда скорее всего MTA его
> и прибивает по какому-то таймауту, надо его доки читать.
> Варианты решения:
> 1) Крутить MTA
> 2) Форкать скрипт, папу убивать, дочка отвязанная от родителя будет жить сколько
> захочет.
> 3) Варианты 1 и 2 - ИМХО костыли, ибо тупо ждать 14
> часов - это неправильно. Я бы менял архитектуру, например скидывать данные
> в очередь с датой поступления, и по крону проверять.Совершенно верно - MTA exim запускает
Второй вариант нравится меньше всего
Третих вариантов куча, но думал до этого не дойдёт...Самый простой способ запускать по крону проталкивающий скрипт :)
Спасибо за помощь! С наступающим :)
>> А кто запускает этот скрипт, непосредственно MTA? Тогда скорее всего MTA его
>> и прибивает по какому-то таймауту, надо его доки читать.
>> Варианты решения:
>> 2) Форкать скрипт, папу убивать, дочка отвязанная от родителя будет жить сколько
>> захочет.
> Совершенно верно - MTA exim запускает
> Третих вариантов куча, но думал до этого не дойдёт...Четвёртый - поробовать пускать скрипт nohup -ом.
> Самый простой способ запускать по крону проталкивающий скрипт :)
Не факт, что у "детей капитана Крона" время жизни не ограничено _ещё _больше...
> Спасибо за помощь! С наступающим :)
Пасиб! Всех с! :))
>> Самый простой способ запускать по крону проталкивающий скрипт :)
> Не факт, что у "детей капитана Крона" время жизни не ограничено _ещё
> _больше...Эхх, праздники-то сказываются =)
> Написан скрипт на 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-
tionSYNOPSIS
at [-V] [-q queue] [-f file] [-mldbv] TIME
at -c job [job...]
atq [-V] [-q queue]
atrm [-V] job [job...]
batch
...
>[оверквотинг удален]
> 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 час ночи.
соответственно проще запустить по крону ещё один скрипт, который при наличии свежего прайса во временной таблице - перенесёт его в рабочую базу :)