ОС: FreeBSD 6.3
веб-сервер: lighttpd в chroot
php: FastCGI, v5.2.5
sendmail: mini_sendmail из портов, собранный STATICВсе необходимые библиотеки находятся в chroot, все модули php работают.
Почта исправно уходит сразу после запуска FastCGI-child процесса, но через 20-30 минут перестает.Подскажите - куда копать?
>ОС: FreeBSD 6.3
>веб-сервер: lighttpd в chroot
>php: FastCGI, v5.2.5
>sendmail: mini_sendmail из портов, собранный STATIC
>
>Все необходимые библиотеки находятся в chroot, все модули php работают.
>Почта исправно уходит сразу после запуска FastCGI-child процесса, но через 20-30 минут
>перестает.
>
>Подскажите - куда копать?Пример конфига:
fastcgi.server = ( ".php" =>
( "localhost" =>
("socket" => "/var/run/some.ru-php-fastcgi.socket",
"bin-path" => "/usr/local/bin/php-cgi",
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "0",
"PHP_FCGI_MAX_REQUESTS" => "10000" ),
"bin-copy-environment" => (
"PATH", "SHELL", "USER" ),
"broken-scriptfilename" => "enable",
"max-procs" => 1
)
)
)Пробовал менять max-procs и PHP_FCGI_CHILDREN - в пределах от 1 до 10 - не помогает.
Как именно перестает? Функция mail (или что вы там используете в php) выдает ошибку (если да то какую) или письма в очереди sendmail накапливаются?
>Как именно перестает? Функция mail (или что вы там используете в php)
>выдает ошибку (если да то какую) или письма в очереди sendmail
>накапливаются?Функция mail() выдает FALSE, т.е. ошибка, но номер не возвращается. Письма в очередь даже не попадают - иначе бы отправились.
Такое ощущение, что sendmail не запускается, как будто кончаются какие-то ресурсы у fastcgi-сервера.
Сделайте отдельный скрипт или добавьте параметр в существующий, который будет запускать через system /usr/sbin/sendmail и выводить в браузер результат или ошибку.
Также можно посмотреть на альтернативный вариант - отправку через smtp сессию, в php есть для этого набор функций.
>Сделайте отдельный скрипт или добавьте параметр в существующий, который будет запускать через
>system /usr/sbin/sendmail и выводить в браузер результат или ошибку.
>Также можно посмотреть на альтернативный вариант - отправку через smtp сессию, в
>php есть для этого набор функций.Возвращаемый код ошибки - 2, никаких строковых значений не возвращается. Сразу после перезапуска lighttpd - все работает, код ошибки тем же скриптом - 0.
Альтернативный вариант не подходит, потому что на сервере по этому же шаблону (lighttpd в chroot) работает несколько десятков сайтов клиентов, т.е. это что-то вроде shared hosting. Заставить клиентов переходить на PHPMailer - нереальная задача, почти все используют только mail().
>[оверквотинг удален]
>>php есть для этого набор функций.
>
>Возвращаемый код ошибки - 2, никаких строковых значений не возвращается. Сразу после
>перезапуска lighttpd - все работает, код ошибки тем же скриптом -
>0.
>
>Альтернативный вариант не подходит, потому что на сервере по этому же шаблону
>(lighttpd в chroot) работает несколько десятков сайтов клиентов, т.е. это что-то
>вроде shared hosting. Заставить клиентов переходить на PHPMailer - нереальная задача,
>почти все используют только mail().Вот пример скрипта которым тестируется отправка:
<?
$retv = system('echo "To: some@mail.com" | /usr/local/bin/sendmail -s127.0.0.1 -t', $rv);
print_r($retv);
print_r($rv);
?>Код ошибки - 2 - что это за ошибка, подскажите - не могу найти расшифровку.
Если это "сигнал", то в соответствии с sys/signal.h:
#define SIGINT 2 /* interrupt */
но прерывания-то никто не посылал.