imap_timeout глючит

antson

Новичок
Партнер клуба
Код:
// объявление function shutdown()  -  где протоколирование пишет $debug_msg в лог

set_time_limit(300);
imap_timeout(IMAP_OPENTIMEOUT,30);
...
$mhost='{imap.yandex.ru/novalidate-cert/norsh}';
....
$debug_msg = 'подключаемся к почтовому ящику по IMAP';
$mbox = imap_open($mhost, $muser, $mpass) or die('error open '.imap_last_error());
$debug_msg = 'запрашиваем кол-во писем в почтовом ящике';
...
В логе запись , что кроновский скрипт проработал 14884.425590992 sec

почему не отвалилось на 300 секунде, понятно.
Но почему не действует в 30 ?

И еще вот такое установка IMAP_CLOSETIMEOUT и последующее чтение его всегда 0.

https://bugs.php.net/bug.php?id=61846
статус open

Вопрос забить на это болт или киллять процессы ?
 

AnrDaemon

Продвинутый новичок
В CLI не влияет set_time_limit. Вообще. Настройка жёстко заблокирована в неограниченное количество времени.
Вместо imap_timeout попробуй использовать stream_set_timeout и аналогичные.
А вообще последний раз изучая этот вопрос, я натыкался на сообщение, что статус модуля IMAP в PHP - "ХЗ как работает и ладно".
IMO, лучше будет заюзать PHPMailer. Там по крайней мере сокет функции напрямую используются.

ПыСы
Если не секрет - каково назначение скрипта?
 

Вурдалак

Продвинутый новичок
В CLI не влияет set_time_limit. Вообще.
Чё? У него лимит не работает, потому что http://php.net/set_time_limit
Any time spent on activity that happens outside the execution of the script such as system calls using system(), stream operations, database queries, etc. is not included when determining the maximum time that the script has been running.
А так set_time_limit вполне себе работает в CLI.
 

antson

Новичок
Партнер клуба
AnrDaemon, почту из почтового ящика перекладывает в таблицу СУБД с кучей нужных нам признаков.
 

antson

Новичок
Партнер клуба
сейчас выкрутился таким способом.
скрипт запускается раз 2 минуты.
в мемкеше ставится флаг работает, чтобы не запускалось более одной копии.


теперь у меня так
Если флаг стоит , то конец

1. флаг на 40 секунд
2. открытие ящика
3 прошло больше 40 секунд - конец
4 флаг на 590 секунд - этого должно быть достаточно, чтобы вынуть все новую почту

999 снятие флага запуска

если зависнет на открытие, через 2 минуты сработает следующий запуск, а зависший тихо скончается когда отлипнет
 

WMix

герр M:)ller
Партнер клуба
в мемкеше ставится флаг работает, чтобы не запускалось более одной копии.
не знаю, приколит или нет, количество запущенных скриптов считаем так
Код:
ps ax | grep \"{$currentScript}\" | grep -v grep | grep -v bash | grep -v bin/sh | wc -l
опечатался видать хотел троепопие написать, но в phpmailer другое. не о том
 

antson

Новичок
Партнер клуба
WMix, при проверке через ps сложнее принимать решение, что все таки можно запуститься, а тот который запущен завис и ничего полезного не делает.
 

antson

Новичок
Партнер клуба
на вторые сутки, дошло до утки
почту по крону не только я проверяю(даже простые почтовые программы стучаться).
и предполагаю запросов , что график по секундам минуты, имеет вид
o000oo________________________
а так как в кроне нельзя указывать секунды, вставил случайный слип на 5-15 секунд, чтобы
сдвинуться немного по времени

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

antson

Новичок
Партнер клуба
Активист, и что означал сей список ?
знаю ли я про них ?
так вопрос и был , почему я ставлю лимит в 30 секунд, а скрипт по нему не отваливается
imap_timeout(IMAP_OPENTIMEOUT,30);
$mbox = imap_open($mhost, $muser, $mpass) or die('error open '.imap_last_error());
 

antson

Новичок
Партнер клуба
Активист,
IMAP_OPENTIMEOUT = 30 , IMAP_READTIMEOUT = 60, IMAP_WRITETIMEOUT=60 or IMAP_CLOSETIMEOUT =0 (не меняет значение , хотя указываю явно )
 

antson

Новичок
Партнер клуба
в логах отловил за 10 часов 4 случая с таймаутом 61-65 сек и ошибкой Error connect: TLS/SSL failure for imap.yandex.ru: SSL negotiation failed
 
Сверху