From f6bb183cb45b6eb1ab21f1af9e4e64d2900dde77 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 10 Sep 2025 19:40:37 +0000 Subject: [PATCH] Add 60-second wait and process verification to restart operations for reliable scheduler functionality Co-authored-by: iaretechnician <2749183+iaretechnician@users.noreply.github.com> --- ControlPanel/_agent-linux/ogp_agent.pl | 30 ++++++++++++++++++++++++ ControlPanel/_agent-windows/ogp_agent.pl | 28 ++++++++++++++++++++++ _agent-linux/ogp_agent.pl | 30 ++++++++++++++++++++++++ _agent-windows/ogp_agent.pl | 28 ++++++++++++++++++++++ 4 files changed, 116 insertions(+) diff --git a/ControlPanel/_agent-linux/ogp_agent.pl b/ControlPanel/_agent-linux/ogp_agent.pl index 111c564d..ef66e125 100755 --- a/ControlPanel/_agent-linux/ogp_agent.pl +++ b/ControlPanel/_agent-linux/ogp_agent.pl @@ -2826,6 +2826,36 @@ sub restart_server_without_decrypt $server_port, $control_protocol, $control_password, $control_type, $home_path) == 0) { + # Wait for processes to be completely terminated and verify they are killed + logger "Waiting for server processes to terminate completely..."; + my $max_wait_attempts = 30; # 30 seconds max to wait for processes to die + my $wait_count = 0; + + while ($wait_count < $max_wait_attempts) + { + my @remaining_pids = get_home_pids($home_id); + if (@remaining_pids == 0) + { + logger "All server processes have been terminated successfully."; + last; + } + + $wait_count++; + logger "Waiting for processes to terminate... (attempt $wait_count/$max_wait_attempts, PIDs: @remaining_pids)"; + sleep 1; + } + + # Final check - if processes still exist, log warning but continue + my @final_check_pids = get_home_pids($home_id); + if (@final_check_pids > 0) + { + logger "Warning: Some processes may still be running (PIDs: @final_check_pids), but proceeding with restart."; + } + + # Wait 60 seconds between stop and start operations as requested + logger "Waiting 60 seconds before starting server as requested for reliable scheduler functionality..."; + sleep 60; + if (universal_start_without_decrypt($home_id, $home_path, $server_exe, $run_dir, $cmd, $server_port, $server_ip, $cpu, $nice, $preStart, $envVars, $game_key, $console_log) == 1) { diff --git a/ControlPanel/_agent-windows/ogp_agent.pl b/ControlPanel/_agent-windows/ogp_agent.pl index 72f8e702..d86f59d6 100755 --- a/ControlPanel/_agent-windows/ogp_agent.pl +++ b/ControlPanel/_agent-windows/ogp_agent.pl @@ -2461,6 +2461,34 @@ sub restart_server_without_decrypt $server_port, $control_protocol, $control_password, $control_type, $home_path) == 0) { + # Wait for screen session to be completely terminated and verify it has stopped + logger "Waiting for server screen session to terminate completely..."; + my $max_wait_attempts = 30; # 30 seconds max to wait for screen to die + my $wait_count = 0; + + while ($wait_count < $max_wait_attempts) + { + if (is_screen_running_without_decrypt(SCREEN_TYPE_HOME, $home_id) == 0) + { + logger "Server screen session has been terminated successfully."; + last; + } + + $wait_count++; + logger "Waiting for screen session to terminate... (attempt $wait_count/$max_wait_attempts)"; + sleep 1; + } + + # Final check - if screen still exists, log warning but continue + if (is_screen_running_without_decrypt(SCREEN_TYPE_HOME, $home_id) == 1) + { + logger "Warning: Server screen session may still be running, but proceeding with restart."; + } + + # Wait 60 seconds between stop and start operations as requested + logger "Waiting 60 seconds before starting server as requested for reliable scheduler functionality..."; + sleep 60; + if (universal_start_without_decrypt($home_id, $home_path, $server_exe, $run_dir, $cmd, $server_port, $server_ip, $cpu, $nice, $preStart, $envVars, $game_key, $console_log) == 1) { diff --git a/_agent-linux/ogp_agent.pl b/_agent-linux/ogp_agent.pl index 111c564d..ef66e125 100755 --- a/_agent-linux/ogp_agent.pl +++ b/_agent-linux/ogp_agent.pl @@ -2826,6 +2826,36 @@ sub restart_server_without_decrypt $server_port, $control_protocol, $control_password, $control_type, $home_path) == 0) { + # Wait for processes to be completely terminated and verify they are killed + logger "Waiting for server processes to terminate completely..."; + my $max_wait_attempts = 30; # 30 seconds max to wait for processes to die + my $wait_count = 0; + + while ($wait_count < $max_wait_attempts) + { + my @remaining_pids = get_home_pids($home_id); + if (@remaining_pids == 0) + { + logger "All server processes have been terminated successfully."; + last; + } + + $wait_count++; + logger "Waiting for processes to terminate... (attempt $wait_count/$max_wait_attempts, PIDs: @remaining_pids)"; + sleep 1; + } + + # Final check - if processes still exist, log warning but continue + my @final_check_pids = get_home_pids($home_id); + if (@final_check_pids > 0) + { + logger "Warning: Some processes may still be running (PIDs: @final_check_pids), but proceeding with restart."; + } + + # Wait 60 seconds between stop and start operations as requested + logger "Waiting 60 seconds before starting server as requested for reliable scheduler functionality..."; + sleep 60; + if (universal_start_without_decrypt($home_id, $home_path, $server_exe, $run_dir, $cmd, $server_port, $server_ip, $cpu, $nice, $preStart, $envVars, $game_key, $console_log) == 1) { diff --git a/_agent-windows/ogp_agent.pl b/_agent-windows/ogp_agent.pl index 72f8e702..d86f59d6 100755 --- a/_agent-windows/ogp_agent.pl +++ b/_agent-windows/ogp_agent.pl @@ -2461,6 +2461,34 @@ sub restart_server_without_decrypt $server_port, $control_protocol, $control_password, $control_type, $home_path) == 0) { + # Wait for screen session to be completely terminated and verify it has stopped + logger "Waiting for server screen session to terminate completely..."; + my $max_wait_attempts = 30; # 30 seconds max to wait for screen to die + my $wait_count = 0; + + while ($wait_count < $max_wait_attempts) + { + if (is_screen_running_without_decrypt(SCREEN_TYPE_HOME, $home_id) == 0) + { + logger "Server screen session has been terminated successfully."; + last; + } + + $wait_count++; + logger "Waiting for screen session to terminate... (attempt $wait_count/$max_wait_attempts)"; + sleep 1; + } + + # Final check - if screen still exists, log warning but continue + if (is_screen_running_without_decrypt(SCREEN_TYPE_HOME, $home_id) == 1) + { + logger "Warning: Server screen session may still be running, but proceeding with restart."; + } + + # Wait 60 seconds between stop and start operations as requested + logger "Waiting 60 seconds before starting server as requested for reliable scheduler functionality..."; + sleep 60; + if (universal_start_without_decrypt($home_id, $home_path, $server_exe, $run_dir, $cmd, $server_port, $server_ip, $cpu, $nice, $preStart, $envVars, $game_key, $console_log) == 1) {