在商业项目中,我需要定期监控SMTP和Accounting服务器,看它是否正常运行。 如果它死了更新mysql中的表。 我无法在服务器托管php脚本上安装任何第三方应用程序或使用exec或通过php_ini_set修改php设置 每项任务大约需要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();
}