diff --git a/server/cron_daily.php b/server/cron_daily.php index ee54a4620716d682fd3d78b7a0ecefe9f99dc2f9..10f168812ca7649b85eb5c960fe8bc976331afdc 100644 --- a/server/cron_daily.php +++ b/server/cron_daily.php @@ -32,6 +32,8 @@ define('SCRIPT_PATH', dirname($_SERVER["SCRIPT_FILENAME"])); require SCRIPT_PATH."/lib/config.inc.php"; require SCRIPT_PATH."/lib/app.inc.php"; +$app->setCaller('cron_daily'); + set_time_limit(0); ini_set('error_reporting', E_ALL & ~E_NOTICE); diff --git a/server/lib/app.inc.php b/server/lib/app.inc.php index a1e75af16a33cf272f1f42d449bfc2b7bde23e7d..a9d47a557869ca961a6ff1edc7f42b87735b0c32 100755 --- a/server/lib/app.inc.php +++ b/server/lib/app.inc.php @@ -35,6 +35,7 @@ class app { var $loaded_modules = array(); var $loaded_plugins = array(); + var $_calling_script = ''; function __construct() { @@ -60,6 +61,23 @@ class app { } + function setCaller($caller) { + $this->_calling_script = $caller; + } + + function getCaller() { + return $this->_calling_script; + } + + function forceErrorExit($errmsg = 'undefined') { + global $conf; + + if($this->_calling_script == 'server') { + @unlink($conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock'); + } + die('Exiting because of error: ' . $errmsg); + } + function uses($classes) { global $conf; diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php index d8bfbea495d2542113d9c392411fd7a8a75c882f..6d428475e8f97371ba8183a9db5c45a6a98e4061 100644 --- a/server/lib/classes/db_mysql.inc.php +++ b/server/lib/classes/db_mysql.inc.php @@ -130,6 +130,8 @@ class db extends mysqli } public function query($queryString) { + global $app; + if($this->isConnected == false) return false; $try = 0; do { @@ -138,6 +140,17 @@ class db extends mysqli if(!$ok) { if(!$this->real_connect($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName)) { $this->updateError('DB::query -> reconnect'); + if($this->errorNumber == '111') { + // server is not available + if($try > 9) { + if(isset($app) && isset($app->forceErrorExit)) { + $app->forceErrorExit('Database connection failure!'); + } + // if we reach this, the app object is missing or has no exit method, so we continue as normal + } + sleep(30); // additional seconds, please! + } + if($try > 9) { return false; } else { diff --git a/server/server.php b/server/server.php index ab2540442436465cdec4d458db3991ac902ee9ef..1d2c6d21d723497ceaa3700ca2d226b8bdac6694 100644 --- a/server/server.php +++ b/server/server.php @@ -31,6 +31,8 @@ define('SCRIPT_PATH', dirname($_SERVER["SCRIPT_FILENAME"])); require SCRIPT_PATH."/lib/config.inc.php"; require SCRIPT_PATH."/lib/app.inc.php"; +$app->setCaller('server'); + set_time_limit(0); ini_set('error_reporting', E_ALL & ~E_NOTICE);