У меня есть один динамический модуль расписания cron. Используя этот модуль, пользователь может настроить cron. В основном существует много полей БД, которые пользователь хочет экспортировать. Таким образом, пользователь может выбрать поля, которые он хочет экспортировать и запланировать cron.
Чтобы управлять всеми этими динамическими кронами, у меня есть один статический хрон, который будет запускаться каждый час и проверять, есть ли динамический хрон, и если найденный хрон будет выполнять эти кроны.
Теперь есть много крон, поэтому я использовал хак для одновременного запуска всех крон.
<?php
public function actionCrondynamic()
{
while(ob_get_level()) ob_end_clean();
header('Connection: close');
ignore_user_abort();
ob_start();
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush();
flush();
$AllDynCronmodel = Cron::model()->findAllByAttributes();
foreach($AllDynCronmodel as $mk=>$SingleCronModel)
{
$CronId=$SingleCronModel->id;
if(is_numeric($CronId))
{
$curl_url = $this->createAbsoluteUrl('cron/runcron') . "&id=$CronId";
$chu = curl_init();
curl_setopt($chu, CURLOPT_URL, $curl_url);
curl_setopt($chu, CURLOPT_FRESH_CONNECT, true);
curl_exec($chu);
curl_close($chu);
}
}
}public function actionRuncron($id)
{
/* close connection start */
while(ob_get_level()) ob_end_clean();
header('Connection: close');
ignore_user_abort();
ob_start();
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush();
flush();
/* Close conncetion End */
set_time_limit(7200);
//Other code
//........................
//........................
}
?>
Теперь в нем много сложных данных. Так что самые сложные кроны занимают до 20-60 + минут. Итак, предположим, что есть 30 динамических крон, тогда будет создан процесс 30 зомби. Теперь проблема в том, что до 10+ крон не могли завершить свое выполнение, и я не могу найти причину.
Так есть ли предел, когда процесс зомби будет убивать автоматически? или какое-то узкое место или что-то еще?
Примечание: я использую движок innodb mysql.
Задача ещё не решена.
Других решений пока нет …