vogelor
2011-03-29 039b461dea2948c53e25a57f77246e2cc1ed1666
rescue-module: now rescue of mysql works fine, even if the admin wanted to NOT rescue mysql
4 files modified
68 ■■■■ changed files
interface/web/admin/templates/server_config_rescue_edit.htm 3 ●●●●● patch | view | raw | blame | history
server/lib/classes/monitor_tools.inc.php 2 ●●● patch | view | raw | blame | history
server/mods-available/rescue_core_module.inc.php 12 ●●●●● patch | view | raw | blame | history
server/server.php 51 ●●●● patch | view | raw | blame | history
interface/web/admin/templates/server_config_rescue_edit.htm
@@ -30,6 +30,9 @@
                    </div>
            </div>
    </fieldset>
      Information: If you want to shut down mysql you have to disable "rescue mysql" and then wait 2-3 minutes.<br>
      if you do not wait 2-3 minutes, rescue will try to restart mysql!
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
server/lib/classes/monitor_tools.inc.php
@@ -519,7 +519,7 @@
        $server_id = intval($conf['server_id']);
        /**  get the "active" Services of the server from the DB */
        $services = $app->dbmaster->queryOneRecord('SELECT * FROM server WHERE server_id = ' . $server_id);
        $services = $app->db->queryOneRecord('SELECT * FROM server WHERE server_id = ' . $server_id);
        /*
         * If the DB is down, we have to set the db to "yes".
         * If we don't do this, then the monitor will NOT monitor, that the db is down and so the
server/mods-available/rescue_core_module.inc.php
@@ -89,14 +89,14 @@
        $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();
        /*
         * rescue mysql if needed
         */
        $this->_rescueMySql();
        
        /*
         * The last step is to save the rescue-data
@@ -273,7 +273,6 @@
        
        
        $app->log('Apache is down! Try rescue apache (try:' . $tryCount . ')...', LOGLEVEL_WARN);
//        echo 'Apache is down! Try rescue apache (try:' . $tryCount . ')...';
        if(is_file($conf['init_scripts'] . '/' . 'httpd')) {
            $daemon = 'httpd';
@@ -340,7 +339,6 @@
        
        
        $app->log('MySQL is down! Try rescue mysql (try:' . $tryCount . ')...', LOGLEVEL_WARN);
//        echo 'MySQL is down! Try rescue mysql (try:' . $tryCount . ')...';
        if(is_file($conf['init_scripts'] . '/' . 'mysqld')) {
            $daemon = 'mysqld';
server/server.php
@@ -1,7 +1,7 @@
<?php
/*
  Copyright (c) 2007, Till Brehm, projektfarm Gmbh
  Copyright (c) 2007-2011, Till Brehm, projektfarm Gmbh
  All rights reserved.
  Redistribution and use in source and binary forms, with or without modification,
@@ -54,33 +54,68 @@
 * Try to Load the server configuration from the master-db
 */
if ($app->dbmaster->connect()) {
    // get the dalaog_id of the last performed record
    $server_db_record = $app->dbmaster->queryOneRecord("SELECT * FROM server WHERE server_id = " . $conf['server_id']);
    $conf['last_datalog_id'] = (int) $server_db_record['updated'];
    $conf['mirror_server_id'] = (int) $server_db_record['mirror_server_id'];
    // Load the ini_parser
    $app->uses('ini_parser');
    // Get server configuration
    $conf['serverconfig'] = $app->ini_parser->parse_ini_string(stripslashes($server_db_record['config']));
    // Set the loglevel
    $conf['log_priority'] = intval($conf['serverconfig']['server']['loglevel']);
    // we do not need this variable anymore
    unset($server_db_record);
    /*
     * Save the rescue-config, maybe we need it (because the database is down)
     */
    $tmp['serverconfig']['server']['loglevel'] = $conf['log_priority'];
    $tmp['serverconfig']['rescue'] = $conf['serverconfig']['rescue'];
    file_put_contents(dirname(__FILE__) . "/temp/rescue_module_serverconfig.ser.txt", serialize($tmp));
    unset($tmp);
    // protect the file
    chmod(dirname(__FILE__) . "/temp/rescue_module_serverconfig.ser.txt", 0600);
} else {
    /*
     * The master-db is not available.
     * Problem: because we need to start the rescue-module (to rescue the DB if this IS the
     * server, the master-db is running at) we have to initialize some config...
     */
    $conf['last_datalog_id'] = intval('9223372036854775807'); // maxint at 32 and 64 bit systems
    $conf['mirror_server_id'] = 0; // no mirror
    // Set the loglevel to warning
    $conf['log_priority'] = LOGLEVEL_WARN;
    /*
     * If there is a temp-file with the data we could get from the database, then we use it
     */
    $tmp = array();
    if (file_exists(dirname(__FILE__) . "/temp/rescue_module_serverconfig.ser.txt")){
        $tmp = unserialize(file_get_contents(dirname(__FILE__) . "/temp/rescue_module_serverconfig.ser.txt"));
    }
    // maxint at 32 and 64 bit systems
    $conf['last_datalog_id'] = intval('9223372036854775807');
    // no mirror
    $conf['mirror_server_id'] = 0;
    // Set the loglevel
    $conf['log_priority'] = (isset($tmp['serverconfig']['server']['loglevel']))? $tmp['serverconfig']['server']['loglevel'] : LOGLEVEL_ERROR;
    /*
     * Set the configuration to rescue the database
     */
    $conf['serverconfig']['rescue']['try_rescue'] = 'y';
    $conf['serverconfig']['rescue']['do_not_try_rescue_mysql'] = 'n';
    if (isset($tmp['serverconfig']['rescue'])){
        $conf['serverconfig']['rescue'] = $tmp['serverconfig']['rescue'];
    }
    else{
        $conf['serverconfig']['rescue']['try_rescue'] = 'n';
    }
    // we do not need this variable anymore
    unset($tmp);
}