В коммерческом проекте мне нужно периодически контролировать 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();
}
Задача ещё не решена.
Других решений пока нет …