jquery — нужно долго выполнять задачу в переполнении стека

В коммерческом проекте мне нужно периодически контролировать SMTP и учетные серверы, чтобы убедиться, что он работает и работает правильно.
если он мертв, обновите таблицу в MySQL.
Я не могу установить любое стороннее приложение на сервер, на котором размещен скрипт php, или использовать exec или изменить настройки php через php_ini_set.
каждая задача занимает от 10 до 30 секунд
Я пытался запускать задачи через вызовы jquery ajax
и это сработало, но проблема в том, что когда выполняется запрос jquery, вы не можете перейти на любую другую страницу и xhr.abort (); не работает и зависает при загрузке до завершения задачи jquery.

Это то, что я попробовал в моем файле JS

var monitor_running = false;
var xhr;
function monitor() {
if (document.readyState === "complete") {
if (monitor_running === false) {
monitor_call();
}
else {
console.log("jobs Already running ===>");
}
}
}
window.onbeforeunload = function () {
console.log(xhr);
xhr.abort();
alert(xhr.status);
};
setInterval(monitor, monitor_interval * 1000);

function monitor_call() {
monitor_running = true;
console.log("jobs running");

xhr = $.ajax({url: './ajax.php',
data: {
cmd: 'monitor'
},
type: 'post',
async: true,
success: function (output) {
monitor_running = false;
console.log(output + " job is finished");
}
});
}

и на странице php:

<?php
include_once '../includes/config.php';
$tpl_obj = new template('admin');
$navigation_obj = new navigation();

$auth = $navigation_obj->admin_is_auth();
if (!$auth) {
die('Auth Failed !');
}

function monitor() {
sleep(10);
echo 'done';
//    $monReport['acc'] = monitor::domon('acc');
//    $monReport['smtp'] = monitor::domon('smtp');
//    $monReport['payment'] = monitor::domon('payment');
//    $monReport['dns'] = monitor::domon('dns');
//    return json_encode($monReport);
}

$cmd_post = filter_input(INPUT_POST, 'cmd');
$cmd_get = filter_input(INPUT_GET, 'cmd');if ($cmd_post == 'monitor') {
echo monitor();
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]