I am trying to run a Selenium WebDriver script that takes quite a long time to complete. The thing is that while executing the said script on my server, after about an hour and a half, actions that before took 10 seconds to complete now take about 2 minutes, which makes the execution extremly slow. Analyzing what the problem could be, I have seen that several crhome processes are created during the execution. For example, when I create the execution at first, I have 4 chrome processes, while, when the execution has spent some hours executing, 24 processes have been created.
I have the following script that tries to rerun the script if an exception has been thrown during the execution and also try to remove unnecessary chrome processes to free resources up every hour, but it seems this is not working, because instead of what I wanted to do, this is killing the main chrome process, meaning it causes the script to stop and having to rerun it from the shell (so only 10 hours of execution would be performed, one per attempt). Is there any way to only get rid of the unnecessary chrome processes in this script?
max_attempts=10 attempt=1 log_file="../logs/execution_log_$(date +"%d%m%Y").txt" while [ $attempt -le $max_attempts ]; do # Kill any running instances of python3, chromedriver, chrome and google-chrome-stable pkill -f "python3" pkill -f "chromedriver" pkill -f "chrome" pkill -f "google-chrome-stable" # Run script with nohup nohup python3 main.py >> "$log_file" 2>&1 & # Store the process ID of the script script_pid=$! start_time=$(date +%s) # Wait for the script to finish or check if it is still running while ps -p $script_pid > /dev/null; do sleep 5 # Check if the elapsed time exceeds 1 hour (3600 seconds) current_time=$(date +%s) elapsed_time=$((current_time - start_time)) if [ $elapsed_time -ge 3600 ]; then echo "$(date) Killing zombie Chrome processes..." # Kill all chrome processes except for the oldest pkill -f "chrome --type=zygote" pkill -f "chrome --type=renderer" pkill -f "chrome --type=gpu-process" pkill -f "chrome --type=utility" break fi done echo "$(date) The command has stopped" exit_code=$? # Check if exit code is different from 0 and if the execution log file's last line is equal to the literal String to break the loop if [ $exit_code -ne 0 ] && [ "$(tail -n 1 "$log_file")" = "ENDOF SCRIPT" ]; then echo "$(date) Script completed successfully with exit code 0." break else echo "$(date) Script exited with code $exit_code." # If it's the last attempt, print a failure message and exit if [ $attempt -eq $max_attempts ]; then echo "$(date) Maximum attempts reached. Script failed." # Kill any running instances of python3, chromedriver, chrome and google-chrome-stable pkill -f "python3" pkill -f "chromedriver" pkill -f "chrome" pkill -f "google-chrome-stable" exit 1 fi echo "$(date) Restarting command..." attempt=$((attempt + 1)) fi done