From e1ceb050e19c7574bca146a8da7047ee4ff456b5 Mon Sep 17 00:00:00 2001 From: Marius Burkard <m.burkard@pixcept.de> Date: Sun, 10 Jul 2016 05:02:35 -0400 Subject: [PATCH] Merge branch 'stable-3.1' --- server/mods-available/rescue_core_module.inc.php | 90 +++++++++++++++++++++++++++----------------- 1 files changed, 55 insertions(+), 35 deletions(-) diff --git a/server/mods-available/rescue_core_module.inc.php b/server/mods-available/rescue_core_module.inc.php index f1b25bd..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,8 @@ * @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']" /* @@ -447,7 +465,7 @@ * of the service */ 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 * if the service is already running or not. If so, we have to kill them hard @@ -459,5 +477,7 @@ */ exec($app->system->getinitcommand($daemon, 'start')); } + } + ?> -- Gitblit v1.9.1