Upload files to "Factorio"
Starts multiple Factorio server with a single server install.
This commit is contained in:
		
							parent
							
								
									a2369976c2
								
							
						
					
					
						commit
						f0ff04f325
					
				
					 1 changed files with 201 additions and 0 deletions
				
			
		
							
								
								
									
										201
									
								
								Factorio/screenstart.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								Factorio/screenstart.sh
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,201 @@
 | 
				
			||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					#ClayGarth.com 
 | 
				
			||||||
 | 
					game=factorio
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					############################## SAVE AND STOP FUNCTIONS ######################
 | 
				
			||||||
 | 
					stop() {
 | 
				
			||||||
 | 
					    echo "Stopping $server server."
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    # Try to save before forcing the screen closed.
 | 
				
			||||||
 | 
					    screen -p 0 -S $server -X eval "stuff /quit\015" >> /dev/null 2>&1
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    LOG_FILE="/home/$game/servers/$server/factorio-current.log"
 | 
				
			||||||
 | 
					    MONITOR_STRING="Goodbye"
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    echo "Monitoring the $server server's log file for save confirmation."
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    # Check if the monitor string is already present in the log file
 | 
				
			||||||
 | 
					    if grep -q "$MONITOR_STRING" "$LOG_FILE"; then
 | 
				
			||||||
 | 
					        echo "The $server server was already stopped!"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        # Tail the log file and monitor for the specified string
 | 
				
			||||||
 | 
					        # Wait for the server to fully save before starting the server instead of force quitting the screen
 | 
				
			||||||
 | 
					        if timeout 30 tail -n 0 -F "$LOG_FILE" | grep -q "$MONITOR_STRING"; then
 | 
				
			||||||
 | 
					            echo "The $server server has saved successfully."
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            echo "Timeout reached. The $server server did not save within 30 seconds."
 | 
				
			||||||
 | 
					            screen -S $server -p 0 -X stuff "^C" >> /dev/null 2>&1
 | 
				
			||||||
 | 
					            sleep 2
 | 
				
			||||||
 | 
					            screen -X -S $server quit >> /dev/null 2>&1
 | 
				
			||||||
 | 
					            sleep 1
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    # Removes the .temp save game to fix loading issues.
 | 
				
			||||||
 | 
					    # Technically a fix, but it needs to go through each server's files.
 | 
				
			||||||
 | 
					    cd /home/$game/servers/$server/saves || exit 1
 | 
				
			||||||
 | 
					    rm ./*.tmp.zip >> /dev/null 2>&1
 | 
				
			||||||
 | 
					    echo "=============================="
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					stopall(){
 | 
				
			||||||
 | 
					    server="test"
 | 
				
			||||||
 | 
					    stop
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    server="ribbon"
 | 
				
			||||||
 | 
					    stop
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    server="family"
 | 
				
			||||||
 | 
					    stop
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    server="private"
 | 
				
			||||||
 | 
					    stop
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					################################ UPDATE FUNCTION ##################################
 | 
				
			||||||
 | 
					update(){
 | 
				
			||||||
 | 
					# URL for the Factorio API
 | 
				
			||||||
 | 
					FACTORIO_API="https://factorio.com/api/latest-releases"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use curl to get the JSON response from the Factorio API
 | 
				
			||||||
 | 
					FACTORIO_RESPONSE=$(curl -s "$FACTORIO_API")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use jq to parse the JSON and extract the stable headless version
 | 
				
			||||||
 | 
					FACTORIO_VERSION=$(echo "$FACTORIO_RESPONSE" | jq -r '.stable.headless')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Remove periods from the Factorio version number
 | 
				
			||||||
 | 
					FACTORIO_VERSION_NO_PERIODS=$(echo "$FACTORIO_VERSION" | tr -d '.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Path to the file storing the current Factorio version
 | 
				
			||||||
 | 
					VERSION_FILE="/home/$game/factorio_version.txt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Check if version.txt exists and if the latest Factorio version is newer
 | 
				
			||||||
 | 
					if [ -f "$VERSION_FILE" ]; then
 | 
				
			||||||
 | 
					    CURRENT_VERSION=$(cat "$VERSION_FILE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if [ "$FACTORIO_VERSION_NO_PERIODS" -gt "$CURRENT_VERSION" ]; then
 | 
				
			||||||
 | 
					        echo "Newer Factorio version available. Updating $VERSION_FILE and downloading..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Update version.txt with the new Factorio version
 | 
				
			||||||
 | 
					        echo "$FACTORIO_VERSION_NO_PERIODS" > "$VERSION_FILE"
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
						# Update Factorio
 | 
				
			||||||
 | 
						cd /home/$game || exit 1
 | 
				
			||||||
 | 
						wget https://www.factorio.com/get-download/stable/headless/linux64 -O factorio.tar.xz
 | 
				
			||||||
 | 
						tar -xf factorio.tar.xz
 | 
				
			||||||
 | 
						rm -f factorio.tar.xz
 | 
				
			||||||
 | 
						#mod updater
 | 
				
			||||||
 | 
						#default mods, most servers will use this mod dir
 | 
				
			||||||
 | 
						#servers w/ special mods will need a new line under here and a new dir created for them.
 | 
				
			||||||
 | 
						/usr/bin/python3 /home/factorio/mod_updater.py -s /home/factorio/servers/Master/server-settings.json -m /home/factorio/mods/default --token 2674c79ebc4236ff57d49fb9e04c29 --username clash --fact-path /home/factorio/factorio/bin/x64/factorio --update
 | 
				
			||||||
 | 
						#/usr/bin/python3 /home/factorio/mod_updater.py -s /home/factorio/servers/Master/server-settings.json -m /home/factorio/mods/dad --token 2674c79ebc4236ff57d49fb9e04c29 --username clash --fact-path /home/factorio/factorio/bin/x64/factorio --update
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        echo "Factorio is already up-to-date. No need to download an update."
 | 
				
			||||||
 | 
					        echo "=============================="
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					    # Create version.txt if it doesn't exist
 | 
				
			||||||
 | 
					    echo "$FACTORIO_VERSION_NO_PERIODS" > "$VERSION_FILE"
 | 
				
			||||||
 | 
					    echo "Factorio version file created."
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					################################ BASH ARGUMENTS ################################
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					if [ "$1" = "--update" ];
 | 
				
			||||||
 | 
					then
 | 
				
			||||||
 | 
					    update
 | 
				
			||||||
 | 
					    echo "updated"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					if [ "$1" = "--help" ];
 | 
				
			||||||
 | 
					then
 | 
				
			||||||
 | 
					    echo "--update or --stop"
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ "$1" = "--stop" ];
 | 
				
			||||||
 | 
					then
 | 
				
			||||||
 | 
					    stopall
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					################################ ISSUE FIXES ################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#fixes perms issues
 | 
				
			||||||
 | 
					chown -R $game:$game /home/$game/ > /dev/null 2>&1
 | 
				
			||||||
 | 
					chmod -R 755 /home/factorio/mods > /dev/null 2>&1
 | 
				
			||||||
 | 
					chmod +x /home/$game/factorio/bin/x64/factorio > /dev/null 2>&1
 | 
				
			||||||
 | 
					#Copy mod settings, they sometimes get overwritten
 | 
				
			||||||
 | 
					cp /home/factorio/mods/mod-settings.dat /home/factorio/mods/default/ > /dev/null 2>&1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					######################################### UPDATE &RESTART Servers ###########################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#Starts a screen session for each server. 
 | 
				
			||||||
 | 
					#Change --server-settings , --config and --port for each server.
 | 
				
			||||||
 | 
					#Do NOT put $start in quotes when starting the screen. Even if ShellCheck tells you to.
 | 
				
			||||||
 | 
					cd /home/$game/factorio/bin/x64/ || exit 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#Stop all servers
 | 
				
			||||||
 | 
					stopall
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#Update Factorio if needed
 | 
				
			||||||
 | 
					update
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#Start all servers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#TEST SERVER
 | 
				
			||||||
 | 
					server='test'
 | 
				
			||||||
 | 
					port='34198'
 | 
				
			||||||
 | 
					start="/home/$game/factorio/bin/x64/factorio --start-server-load-latest --server-settings /home/factorio/servers/$server/server-settings.json --config /home/factorio/servers/$server/config.ini --executable-path /home/factorio/factorio/bin/x64/ --mod-directory /home/factorio/mods/default/ --port $port"
 | 
				
			||||||
 | 
					echo "Starting test Server"
 | 
				
			||||||
 | 
					/usr/bin/screen -dmS test $start
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#RIBBON SERVER
 | 
				
			||||||
 | 
					server='ribbon'
 | 
				
			||||||
 | 
					port='34196'
 | 
				
			||||||
 | 
					start="/home/$game/factorio/bin/x64/factorio --start-server-load-latest --server-settings /home/factorio/servers/$server/server-settings.json --config /home/factorio/servers/$server/config.ini --executable-path /home/factorio/factorio/bin/x64/ --mod-directory /home/factorio/mods/default/ --port $port"
 | 
				
			||||||
 | 
					#echo "Starting ribbon Server"
 | 
				
			||||||
 | 
					#/usr/bin/screen -dmS ribbon $start
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#FAMILY SERVER
 | 
				
			||||||
 | 
					server='family'
 | 
				
			||||||
 | 
					port='34197'
 | 
				
			||||||
 | 
					start="/home/$game/factorio/bin/x64/factorio --start-server-load-latest --server-settings /home/factorio/servers/$server/server-settings.json --config /home/factorio/servers/$server/config.ini --executable-path /home/factorio/factorio/bin/x64/ --mod-directory /home/factorio/mods/default/ --port $port"
 | 
				
			||||||
 | 
					echo "Starting family Server"
 | 
				
			||||||
 | 
					/usr/bin/screen -dmS family $start
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#PRIVATE SERVER
 | 
				
			||||||
 | 
					server='private'
 | 
				
			||||||
 | 
					port='34199'
 | 
				
			||||||
 | 
					start="/home/$game/factorio/bin/x64/factorio --start-server-load-latest --server-settings /home/factorio/servers/$server/server-settings.json --config /home/factorio/servers/$server/config.ini --executable-path /home/factorio/factorio/bin/x64/ --mod-directory /home/factorio/mods/default/ --port $port"
 | 
				
			||||||
 | 
					echo "Starting private Server"
 | 
				
			||||||
 | 
					/usr/bin/screen -dmS private $start
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "=============================="
 | 
				
			||||||
 | 
					screen -ls
 | 
				
			||||||
 | 
					echo "=============================="
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exit 0
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue