From a7796bec1be01b51f400e9a3a698535b12b636aa Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Thu, 11 Feb 2016 13:44:27 -0500
Subject: [PATCH] Merge branch 'stable-3.1'

---
 server/mods-available/web_module.inc.php |   49 +++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 45 insertions(+), 4 deletions(-)

diff --git a/server/mods-available/web_module.inc.php b/server/mods-available/web_module.inc.php
index c31aa67..36e1391 100644
--- a/server/mods-available/web_module.inc.php
+++ b/server/mods-available/web_module.inc.php
@@ -203,7 +203,7 @@
 			$daemon = $web_config['server_type'];
 			break;
 		default:
-			if(is_file($conf['init_scripts'] . '/' . 'httpd')) {
+			if(is_file($conf['init_scripts'] . '/' . 'httpd') || is_dir('/etc/httpd')) {
 				$daemon = 'httpd';
 			} else {
 				$daemon = 'apache2';
@@ -212,11 +212,35 @@
 
 		$retval = array('output' => '', 'retval' => 0);
 		if($action == 'restart') {
-			exec($app->system->getinitcommand($daemon, 'restart').' 2>&1', $retval['output'], $retval['retval']);
-
+			$cmd = $app->system->getinitcommand($daemon, 'restart');
 		} else {
-			exec($app->system->getinitcommand($daemon, 'reload').' 2>&1', $retval['output'], $retval['retval']);
+			$cmd = $app->system->getinitcommand($daemon, 'reload');
 		}
+		
+		if($web_config['server_type'] == 'nginx'){
+			$app->log("Checking nginx configuration...", LOGLEVEL_DEBUG);
+			exec('nginx -t 2>&1', $retval['output'], $retval['retval']);
+			if($retval['retval'] == 0){
+				$app->log("nginx configuration ok!", LOGLEVEL_DEBUG);
+			} else {
+				$app->log("nginx config test failed!", LOGLEVEL_DEBUG);
+				return $retval;
+			}
+		}
+		
+		exec($cmd.' 2>&1', $retval['output'], $retval['retval']);
+		
+		// if restart failed despite successful syntax check => try again
+		if($web_config['server_type'] == 'nginx' && $retval['retval'] > 0){
+			sleep(2);
+			exec($cmd.' 2>&1', $retval['output'], $retval['retval']);
+		}
+		$app->log("Restarting httpd: $cmd", LOGLEVEL_DEBUG);
+		
+		// nginx: do a syntax check because on some distributions, the init script always returns 0 - even if the syntax is not ok (how stupid is that?)
+		//if($web_config['server_type'] == 'nginx' && $retval['retval'] == 0){
+			//exec('nginx -t 2>&1', $retval['output'], $retval['retval']);
+		//}
 		return $retval;
 	}
 
@@ -244,6 +268,22 @@
 					if(preg_match('/^ID=ubuntu/m', $tmp) && preg_match('/^VERSION_ID="14\.04"/m', $tmp)) {
 						$initcommand = '/sbin/start-stop-daemon --stop --signal USR2 --quiet --pidfile /var/run/php5-fpm.pid --name php5-fpm';
 					}
+					// And the next workaround, php-fpm reloads in centos 7 downt work as well.
+					if(preg_match('/^ID=centos/m', $tmp) && preg_match('/^VERSION_ID="7"/m', $tmp)) {
+						$initcommand = 'systemctl restart php-fpm.service';
+					}
+					unset($tmp);
+				}	
+			}
+			
+			if($action == 'reload') {
+				// And the next workaround, php-fpm reloads in centos 7 downt work as well.
+				if(file_exists('/etc/os-release')) {
+					$tmp = file_get_contents('/etc/os-release');
+					// And the next workaround, php-fpm reloads in centos 7 downt work as well.
+					if(preg_match('/^ID="centos"/m', $tmp) && preg_match('/^VERSION_ID="7"/m', $tmp)) {
+						$initcommand = 'systemctl restart php-fpm.service';
+					}
 					unset($tmp);
 				}
 			}
@@ -251,6 +291,7 @@
 
 		$retval = array('output' => '', 'retval' => 0);
 		exec($initcommand.' 2>&1', $retval['output'], $retval['retval']);
+		$app->log("Restarting php-fpm: $initcommand", LOGLEVEL_DEBUG);
 		return $retval;
 	}
 

--
Gitblit v1.9.1