From 5152e9a75e6e0ed4dc26358e4e608ce684147b32 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Tue, 26 Apr 2016 03:01:50 -0400
Subject: [PATCH] Merge branch 'stable-3.1'
---
server/mods-available/rescue_core_module.inc.php | 91 ++++++++++++++++++++++++++++-----------------
1 files changed, 56 insertions(+), 35 deletions(-)
diff --git a/server/mods-available/rescue_core_module.inc.php b/server/mods-available/rescue_core_module.inc.php
index 050d32f..5e8f3db 100644
--- a/server/mods-available/rescue_core_module.inc.php
+++ b/server/mods-available/rescue_core_module.inc.php
@@ -38,9 +38,13 @@
* The monitoring-Data of this module.
* [0] are the actual data, [1] are the data 1 minnute ago [2] are teh data 2 minuntes...
*/
+
+
private $_monitoringData = array();
+
/** The rescue-Data of this module. */
private $_rescueData = array();
+
/**
* This function is called during ispconfig installation to determine
@@ -50,12 +54,14 @@
return true;
}
+
/**
* This function is called when the module is loaded
*/
function onLoad() {
$this->_doRescue();
}
+
/**
* This function is called when a change in one of the registered tables is detected.
@@ -74,7 +80,7 @@
*/
global $conf;
if ((!isset($conf['serverconfig']['rescue']['try_rescue'])) ||
- ((isset($conf['serverconfig']['rescue']['try_rescue'])) && ($conf['serverconfig']['rescue']['try_rescue'] !='y'))){
+ ((isset($conf['serverconfig']['rescue']['try_rescue'])) && ($conf['serverconfig']['rescue']['try_rescue'] !='y'))){
return;
}
@@ -91,7 +97,7 @@
/*
* rescue MongoDB if needed
*/
- $this->_rescueMongoDB();
+// $this->_rescueMongoDB();
/*
* rescue mysql if needed (maybe httpd depends on mysql, so try this first!)
@@ -250,7 +256,7 @@
* This means, we check the data 1 minute ago
*/
if ((!isset($this->_monitoringData[1][0]['data']['webserver'])) ||
- ((isset($this->_monitoringData[1][0]['data']['webserver'])) && ($this->_monitoringData[1][0]['data']['webserver'] != 0))){
+ ((isset($this->_monitoringData[1][0]['data']['webserver'])) && ($this->_monitoringData[1][0]['data']['webserver'] != 0))){
/*
* We do NOT have this data or we have this data, but the webserver was not down 1 minute ago.
* This means, it could be, that the admin is restarting the server.
@@ -269,6 +275,17 @@
/* Set the new try counter */
$this->_rescueData['webserver']['try_counter'] = $tryCount;
+
+ if ($tryCount > 2 && $conf['serverconfig']['web']['server_type'] != 'nginx') {
+ if($app->system->is_user('apache')) {
+ $app->log("Clearing semaphores table for user apache.",LOGLEVEL_WARN);
+ exec("ipcs -s | grep apache | awk '{ print $2 }' | xargs ipcrm sem");
+ }
+ if($app->system->is_user('www-data')) {
+ $app->log("Clearing semaphores table for user apache.",LOGLEVEL_WARN);
+ exec("ipcs -s | grep www-data | awk '{ print $2 }' | xargs ipcrm sem");
+ }
+ }
/* if 5 times will not work, we have to give up... */
if ($tryCount > 5){
@@ -294,42 +311,43 @@
$this->_rescueDaemon($daemon);
}
+
/**
* restarts MongoDB, if needed
*/
- private function _rescueMongoDB(){
- global $app, $conf;
+// private function _rescueMongoDB(){
+// global $app, $conf;
/*
* do nothing, if it is not allowed to rescue mysql
*/
- if ((isset($conf['serverconfig']['rescue']['do_not_try_rescue_mongodb']) && ($conf['serverconfig']['rescue']['do_not_try_rescue_mongodb']) == 'y')){
- return;
- }
+// if ((isset($conf['serverconfig']['rescue']['do_not_try_rescue_mongodb']) && ($conf['serverconfig']['rescue']['do_not_try_rescue_mongodb']) == 'y')){
+// return;
+// }
/*
* if the service is up and running, or the service is not installed there is nothing to do...
*/
- if ($this->_monitoringData[0][0]['data']['mongodbserver'] != 0){
- /* Clear the try counter, because we do not have to try to rescue the service */
- $this->_rescueData['mongodbserver']['try_counter'] = 0;
- return;
- }
+// if ($this->_monitoringData[0][0]['data']['mongodbserver'] != 0){
+// /* Clear the try counter, because we do not have to try to rescue the service */
+// $this->_rescueData['mongodbserver']['try_counter'] = 0;
+// return;
+// }
/*
* OK, the service is installed and down.
* Maybe this is because of a restart of the service by the admin.
* This means, we check the data 1 minute ago
*/
- if ((!isset($this->_monitoringData[1][0]['data']['mongodbserver'])) ||
- ((isset($this->_monitoringData[1][0]['data']['mongodbserver'])) && ($this->_monitoringData[1][0]['data']['mongodbserver'] != 0))){
+// if ((!isset($this->_monitoringData[1][0]['data']['mongodbserver'])) ||
+// ((isset($this->_monitoringData[1][0]['data']['mongodbserver'])) && ($this->_monitoringData[1][0]['data']['mongodbserver'] != 0))){
/*
* We do NOT have this data or we have this data, but the webserver was not down 1 minute ago.
* This means, it could be, that the admin is restarting the server.
* We wait one more minute...
*/
- return;
- }
+// return;
+// }
/*#####
* The service is down and it was down 1 minute ago.
@@ -337,28 +355,28 @@
*#####*/
/* Get the try counter */
- $tryCount = (!isset($this->_rescueData['mongodbserver']['try_counter']))? 1 : $this->_rescueData['mongodbserver']['try_counter'] + 1;
+// $tryCount = (!isset($this->_rescueData['mongodbserver']['try_counter']))? 1 : $this->_rescueData['mongodbserver']['try_counter'] + 1;
/* Set the new try counter */
- $this->_rescueData['mongodbserver']['try_counter'] = $tryCount;
+// $this->_rescueData['mongodbserver']['try_counter'] = $tryCount;
/* if 5 times will not work, we have to give up... */
- if ($tryCount > 5){
- $app->log('MongoDB is down! Rescue will not help!', LOGLEVEL_ERROR);
- return;
- }
+// if ($tryCount > 5){
+// $app->log('MongoDB is down! Rescue will not help!', LOGLEVEL_ERROR);
+// return;
+// }
- $app->log('MongoDB is down! Try rescue MongoDB (try:' . $tryCount . ')...', LOGLEVEL_WARN);
+// $app->log('MongoDB is down! Try rescue MongoDB (try:' . $tryCount . ')...', LOGLEVEL_WARN);
- if(is_file($conf['init_scripts'] . '/' . 'mongodb')) {
- $daemon = 'mongodb';
- } else {
- $daemon = 'mongodb';
- }
+// if(is_file($conf['init_scripts'] . '/' . 'mongodb')) {
+// $daemon = 'mongodb';
+// } else {
+// $daemon = 'mongodb';
+// }
- $this->_rescueDaemon($daemon);
- }
+// $this->_rescueDaemon($daemon);
+// }
/**
* restarts mysql, if needed
@@ -388,7 +406,7 @@
* This means, we check the data 1 minute ago
*/
if ((!isset($this->_monitoringData[1][0]['data']['mysqlserver'])) ||
- ((isset($this->_monitoringData[1][0]['data']['mysqlserver'])) && ($this->_monitoringData[1][0]['data']['mysqlserver'] != 0))){
+ ((isset($this->_monitoringData[1][0]['data']['mysqlserver'])) && ($this->_monitoringData[1][0]['data']['mysqlserver'] != 0))){
/*
* We do NOT have this data or we have this data, but the webserver was not down 1 minute ago.
* This means, it could be, that the admin is restarting the server.
@@ -432,8 +450,9 @@
* @param type $daemon the name of the daemon
*/
private function _rescueDaemon($daemon){
- global $conf;
+ global $app, $conf;
+ $app->uses('system');
// if you need to find all restarts search for "['init_scripts']"
/*
* First we stop the running service "normally"
@@ -445,7 +464,7 @@
* So we have to try to stop but if this will not work, we have to kill the stopping
* of the service
*/
- exec($conf['init_scripts'] . '/' . $daemon . ' stop && (sleep 3; kill $!; sleep 2; kill -9 $!) &> /dev/null');
+ exec($app->system->getinitcommand($daemon, 'stop').' && (sleep 3; kill $!; sleep 2; kill -9 $!) &> /dev/null');
/*
* OK, we tryed to stop it normally, maybe this worked maybe not. So we have to look
@@ -456,7 +475,9 @@
/*
* There are no more zombies left. Lets start the service..
*/
- exec($conf['init_scripts'] . '/' . $daemon . ' start');
+ exec($app->system->getinitcommand($daemon, 'start'));
}
+
}
+
?>
--
Gitblit v1.9.1