From c6e05a8eebc58624c675d4b10d33e94e6b6fa83b Mon Sep 17 00:00:00 2001 From: tbrehm <t.brehm@ispconfig.org> Date: Mon, 12 Sep 2011 10:16:19 -0400 Subject: [PATCH] Implemented: FS#1385 - Define all Email aliases in dovecot autoresponder --- server/mods-available/rescue_core_module.inc.php | 107 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 97 insertions(+), 10 deletions(-) diff --git a/server/mods-available/rescue_core_module.inc.php b/server/mods-available/rescue_core_module.inc.php index 7ce828d..f1c34ca 100644 --- a/server/mods-available/rescue_core_module.inc.php +++ b/server/mods-available/rescue_core_module.inc.php @@ -89,6 +89,11 @@ $this->_rescueData = $this->_getRescueData(); /* + * rescue mysql if needed (maybe apache depends on mysql, so try this first!) + */ + $this->_rescueMySql(); + + /* * rescue apache if needed */ $this->_rescueApache(); @@ -108,7 +113,7 @@ private function _getMonitoringData() { global $app; - $dataFilename = dirname(__FILE__) . "/../lib/rescue_module_monitoringdata.ser.txt"; + $dataFilename = dirname(__FILE__) . "/../temp/rescue_module_monitoringdata.ser.txt"; /* * If the file containing the data is too old (older than 5 minutes) it is better to @@ -156,8 +161,10 @@ /* * We have the newest monitoring data. Save it! + * (and protect it, because there may be sensible data in it) */ file_put_contents($dataFilename, serialize($data)); + chmod($dataFilename, 0600); /* Thats it */ return $data; @@ -170,7 +177,7 @@ * so we do not have parallel access. */ private function _getRescueData() { - $dataFilename = dirname(__FILE__) . "/../lib/rescue_module_rescuedata.ser.txt"; + $dataFilename = dirname(__FILE__) . "/../temp/rescue_module_rescuedata.ser.txt"; /* * If the file containing the data is too old (older than 5 minutes) it is better to @@ -201,8 +208,13 @@ * so we do not have parallel access. */ private function _saveRescueData() { - $dataFilename = dirname(__FILE__) . "/../lib/rescue_module_rescuedata.ser.txt"; + $dataFilename = dirname(__FILE__) . "/../temp/rescue_module_rescuedata.ser.txt"; + /* + * We have the newest data. Save it! + * (and protect it, because there may be sensible data in it) + */ file_put_contents($dataFilename, serialize($this->_rescueData)); + chmod($dataFilename, 0600); } /** @@ -261,17 +273,94 @@ $app->log('Apache is down! Try rescue apache (try:' . $tryCount . ')...', LOGLEVEL_WARN); -// echo 'Apache is down! Try rescue apache (try:' . $tryCount . ')...'; - /* - * First we stop the running service "normally" - */ - $daemon = ''; if(is_file($conf['init_scripts'] . '/' . 'httpd')) { $daemon = 'httpd'; } else { $daemon = 'apache2'; } + + $this->_rescueDaemon($daemon); + } + + /** + * restarts mysql, if needed + */ + private function _rescueMySql(){ + global $app, $conf; + + /* + * do nothing, if it is not allowed to rescue mysql + */ + if ((isset($conf['serverconfig']['rescue']['do_not_try_rescue_mysql']) && ($conf['serverconfig']['rescue']['do_not_try_rescue_mysql']) == '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']['mysqlserver'] != 0){ + /* Clear the try counter, because we do not have to try to rescue the service */ + $this->_rescueData['mysqlserver']['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']['mysqlserver'])) || + ((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. + * We wait one more minute... + */ + return; + } + + /*##### + * The service is down and it was down 1 minute ago. + * We try to rescue it + *#####*/ + + /* Get the try counter */ + $tryCount = (!isset($this->_rescueData['mysqlserver']['try_counter']))? 1 : $this->_rescueData['mysqlserver']['try_counter'] + 1; + + /* Set the new try counter */ + $this->_rescueData['mysqlserver']['try_counter'] = $tryCount; + + /* if 5 times will not work, we have to give up... */ + if ($tryCount > 5){ + $app->log('MySQL is down! Rescue will not help!', LOGLEVEL_ERROR); + return; + } + + + $app->log('MySQL is down! Try rescue mysql (try:' . $tryCount . ')...', LOGLEVEL_WARN); + + if(is_file($conf['init_scripts'] . '/' . 'mysqld')) { + $daemon = 'mysqld'; + } else { + $daemon = 'mysql'; + } + + $this->_rescueDaemon($daemon); + } + + /** + * Tries to stop and then restart the daemon + * + * @param type $daemon the name of the daemon + */ + private function _rescueDaemon($daemon){ + global $conf; + + // if you need to find all restarts search for "['init_scripts']" + /* + * First we stop the running service "normally" + */ /* * ATTENTION! @@ -292,7 +381,5 @@ */ exec($conf['init_scripts'] . '/' . $daemon . ' start'); } - -// if you need to find all restarts search for "['init_scripts']" } ?> -- Gitblit v1.9.1