Просмотр исходного кода

Fix for Environmental Variables

own3mall 8 лет назад
Родитель
Сommit
02bf5a1b1b
1 измененных файлов с 41 добавлено и 41 удалено
  1. 41 41
      ogp_agent.pl

+ 41 - 41
ogp_agent.pl

@@ -459,6 +459,7 @@ sub create_screen_cmd
 {
 	my ($screen_id, $exec_cmd) = @_;
 	$exec_cmd = replace_OGP_Vars($screen_id, $exec_cmd);
+	
 	return
 	  sprintf('export WINEDEBUG="fixme-all" && export DISPLAY=:1 && screen -d -m -t "%1$s" -c ' . SCREENRC_FILE . ' -S %1$s %2$s',
 			  $screen_id, $exec_cmd);
@@ -467,7 +468,7 @@ sub create_screen_cmd
 
 sub create_screen_cmd_loop
 {
-	my ($screen_id, $exec_cmd, $envVars) = @_;
+	my ($screen_id, $exec_cmd, $envVars, $skipLoop) = @_;
 	my $server_start_bashfile = $screen_id . "_startup_scr.sh";
 	
 	$exec_cmd = replace_OGP_Vars($screen_id, $exec_cmd);
@@ -481,29 +482,36 @@ sub create_screen_cmd_loop
 	# If it crashes without user intervention, it will restart
 	open (SERV_START_SCRIPT, '>', $server_start_bashfile);
 	
-	my $respawn_server_command = "#!/bin/bash" . "\n" 
-	. "function startServer(){" . "\n" ;
+	my $respawn_server_command = "#!/bin/bash" . "\n";
+	
+	if(!$skipLoop){
+		$respawn_server_command .= "function startServer(){" . "\n";
+	}
 	
 	if(defined $envVars && $envVars ne ""){
 		$respawn_server_command .= $envVars;
 	}
 	
-	$respawn_server_command .= "NUMSECONDS=`expr \$(date +%s)`" . "\n"
-	. "until " . $exec_cmd . "; do" . "\n" 
-	. "let DIFF=(`date +%s` - \"\$NUMSECONDS\")" . "\n"
-	. "if [ \"\$DIFF\" -gt 15 ]; then" . "\n" 
-	. "NUMSECONDS=`expr \$(date +%s)`" . "\n"
-	. "echo \"Server '" . $exec_cmd . "' crashed with exit code \$?.  Respawning...\" >&2 " . "\n" 
-	. "fi" . "\n" 
-	. "sleep 3" . "\n" 
-	. "done" . "\n" 
-	. "let DIFF=(`date +%s` - \"\$NUMSECONDS\")" . "\n"
-	
-	. "if [ ! -e \"SERVER_STOPPED\" ] && [ \"\$DIFF\" -gt 15 ]; then" . "\n"
-	. "startServer" . "\n"
-	. "fi" . "\n"
-	. "}" . "\n"
-	. "startServer" . "\n";
+	if(!$skipLoop){
+		$respawn_server_command .= "NUMSECONDS=`expr \$(date +%s)`" . "\n"
+		. "until " . $exec_cmd . "; do" . "\n" 
+		. "let DIFF=(`date +%s` - \"\$NUMSECONDS\")" . "\n"
+		. "if [ \"\$DIFF\" -gt 15 ]; then" . "\n" 
+		. "NUMSECONDS=`expr \$(date +%s)`" . "\n"
+		. "echo \"Server '" . $exec_cmd . "' crashed with exit code \$?.  Respawning...\" >&2 " . "\n" 
+		. "fi" . "\n" 
+		. "sleep 3" . "\n" 
+		. "done" . "\n" 
+		. "let DIFF=(`date +%s` - \"\$NUMSECONDS\")" . "\n"
+		
+		. "if [ ! -e \"SERVER_STOPPED\" ] && [ \"\$DIFF\" -gt 15 ]; then" . "\n"
+		. "startServer" . "\n"
+		. "fi" . "\n"
+		. "}" . "\n"
+		. "startServer" . "\n";
+	}else{
+		$respawn_server_command .= $exec_cmd . "\n";
+	}
 	
 	print SERV_START_SCRIPT $respawn_server_command;
 	close (SERV_START_SCRIPT);
@@ -815,7 +823,7 @@ sub universal_start_without_decrypt
 			deleteStoppedStatFile($home_path);
 			$cli_bin = create_screen_cmd_loop($screen_id, $command, $envVars);
 		}else{
-			$cli_bin = create_screen_cmd($screen_id, $command);
+			$cli_bin = create_screen_cmd_loop($screen_id, $command, $envVars, 1);
 		}
 	}
 	elsif($file_extension eq ".jar")
@@ -831,7 +839,7 @@ sub universal_start_without_decrypt
 			deleteStoppedStatFile($home_path);
 			$cli_bin = create_screen_cmd_loop($screen_id, $command, $envVars);
 		}else{
-			$cli_bin = create_screen_cmd($screen_id, $command);
+			$cli_bin = create_screen_cmd_loop($screen_id, $command, $envVars, 1);
 		}
 	}
 	else
@@ -847,7 +855,7 @@ sub universal_start_without_decrypt
 			deleteStoppedStatFile($home_path);
 			$cli_bin = create_screen_cmd_loop($screen_id, $command, $envVars);
 		}else{
-			$cli_bin = create_screen_cmd($screen_id, $command);
+			$cli_bin = create_screen_cmd_loop($screen_id, $command, $envVars, 1);
 		}
 	}
 		
@@ -857,8 +865,8 @@ sub universal_start_without_decrypt
 	logger
 	  "Startup command [ $cli_bin ] will be executed in dir $game_binary_dir.";
 	
-	# Run before start script and set environment variables which will affect create_screen_cmd only... loop already has the envvars as well
-	$run_before_start = run_before_start_commands($home_id, $home_path, $preStart, $envVars);
+	# Run before start script
+	$run_before_start = run_before_start_commands($home_id, $home_path, $preStart);
 	
 	system($cli_bin);
 	
@@ -1732,7 +1740,7 @@ sub lock_additional_files_logic{
 sub run_before_start_commands
 {
 	#return "Bad Encryption Key" unless(decrypt_param(pop(@_)) eq "Encryption checking OK");
-	my ($server_id, $homedir, $beforestartcmd, $envVars) = @_;
+	my ($server_id, $homedir, $beforestartcmd) = @_;
 	
 	if ($homedir ne "" && $server_id ne ""){
 		# Run any prestart scripts
@@ -1751,21 +1759,7 @@ sub run_before_start_commands
 			close FILE;
 			chmod 0755, $prestartcmdfile;
 			system("bash $prestartcmdfile");
-		}
-		
-		
-		# Set and export any environment variables for game server developers unwilling to properly learn Linux
-		if (defined $envVars && $envVars ne ""){
-			my @prestartenvvars = split /[\r\n]+/, $envVars;
-			foreach my $line (@prestartenvvars) {
-				$line = replace_OGP_Env_Vars($server_id, $homedir, $line);
-				if($line ne ""){
-					logger "Configuring environment variable: $line";
-					system($line);
-				}
-			}
-		}
-		
+		}		
 	}else{
 		return -2;
 	}
@@ -1781,6 +1775,12 @@ sub multiline_to_startup_comma_format{
 	return $multiLineVar;
 }
 
+sub multiline_to_bash_commands{
+	my ($multiLineVar) = @_;
+	$multiLineVar =~ s/[\n]+/ && /g;
+	return $multiLineVar;
+}
+
 sub startup_comma_format_to_multiline{
 	my ($multiLineVar) = @_;
 	$multiLineVar =~ s/{OGPNEWLINE}/\n/g;
@@ -3898,4 +3898,4 @@ sub remote_query
 		return encode_base64($response, "");
 	}
 	return -1;
-}
+}