Introduction
This article is about installing and configuring a CSGO game server on Linux systems.
Requirements
- An x86 / x64 compatible system
- Ubuntu 16.04 LTS
- Installed
steamcmd
- HHS VPS 3 server or better
Step 1 - Preparations
Creating the CSGO server folder, where the server files will be found:
mkdir /opt/csgo/
chown steamcmd:steamcmd /opt/csgo/
All commands should be executed as steamcmd
user.
su --shell /bin/bash steamcmd
Step 2 - Installation
Download the server files via steamcmd
:
steamcmd +login anonymous +force_install_dir /opt/csgo/ +app_update 740 +quit
Once the server has been downloaded, the settings can be set.
The CSGO server configuration file is located at /opt/csgo/csgo/cfg/server.cfg
. Here you can edit and insert the sample configuration below.
// ************************************************************************** //
// Counter-Strike: Global Offensive - server.cfg //
// Version 240917 //
// ************************************************************************** //
// .................................. Basic ................................. //
// Hostname - Name of the server.
hostname "SERVERNAME"
// RCON - remote console password.
rcon_password "ADMINPASSWORD"
// Server password - for private servers.
sv_password ""
// Email - Server admin email.
// Example: sv_contact "[email protected]"
sv_contact ""
// LAN mode - If set the server will not show on the internet.
// Default: sv_lan 0
sv_lan 0
// ............................. Server Logging ............................. //
// Enable log - Enables logging to file, console, and udp < on | off >.
// Recommended: log on
log on
// Log bans - Log server bans in the server logs.
// Default: sv_logbans 1
// Recommended: sv_logbans 1
sv_logbans 1
// Log echo - Display log information to the server console.
// Default: sv_logecho 1
// Recommended: sv_logecho 1
sv_logecho 1
// Log file - Log server information in the log file.
// Default: sv_logfile 1
// Recommended: sv_logfile 1
sv_logfile 1
// One file log - Log server information to only one file.
// Default: sv_log_onefile 0
// Recommended: sv_log_onefile 0
sv_log_onefile 0
// Server Hibernation
sv_hibernate_when_empty 1
sv_hibernate_ms 5
// ............................. Server Query ............................. //
// More info at: https://www.gametracker.com/games/csgo/forum.php?thread=91691
host_name_store 1
host_info_show 1
host_players_show 2
// ................................ Ban List ................................ //
// User ban - Server banlist based on user steam ID.
// Recommended: exec banned_user.cfg
exec banned_user.cfg
// IP ban - Server banlist based on user IP.
// Recommended: exec banned_ip.cfg
exec banned_ip.cfg
// Write ID - Writes a list of permanently-banned user IDs to banned_user.cfg.
writeid
// Write IP - Save the ban list to banned_ip.cfg.
writeip
Step 3 - Server administration
To manage (start, stop, update) the server, the following script is needed.
Most settings can be applied unchanged, only the entry GAMETOKEN
has to be changed. A valid server Token must be deposited. Server tokens can be requested here: https://steamcommunity.com/dev/managegameservers
(On low-performance servers, the TICK
entry should be reduced to64
.)
#!/bin/bash
################# SET VARs #################
DIR="/opt/csgo"
SCREENNAME="csgo"
GAMETOKEN=""
TICK=128
GAMETYPE=0
GAMEMODE=1
MAPGROUP="mg_bomb"
MAP="de_dust2"
MAXPLAYER=10
################# DO NOT MODIFY #################
DEAMON="srcds_run"
PARAMS="-game csgo -ip 0.0.0.0 -port 27015 +maxplayers $MAXPLAYER +map $MAP -tickrate $TICK +game_type $GAMETYPE +game_mode $GAMEMODE +mapgroup $MAPGROUP +sv_setsteamaccount $GAMETOKEN"
function start_server {
if [[ `screen -ls | grep $SCREENNAME` ]]; then
echo "The server is already running $SCREENNAME"
else
echo "Starte $SCREENNAME"
if [ -d $DIR ]; then
cd $DIR
screen -d -m -S $SCREENNAME ./$DEAMON $PARAMS
else
echo "The server directory was not specified"
fi
fi
}
function stop_server {
if [[ `screen -ls | grep $SCREENNAME` ]]; then
echo -n "Stoppe $SCREENNAME"
kill `screen -ls | grep $SCREENNAME | awk -F . '{print $1}'| awk '{print $1}'`
echo " ... done."
else
echo "Could not find the screen $SCREENNAME"
fi
}
function update_server {
stop_server
steamcmd +login anonymous +force_install_dir $DIR +app_update 740 +quit
start_server
}
case "$1" in
start)
start_server
;;
stop)
stop_server
;;
restart)
stop_server
start_server
;;
update)
update_server
;;
*)
echo "Usage: $0 (start / stop / update)"
esac
exit 0
For example, the script can be placed at /opt/steamcmd/csgo.sh
.
After that, permissions must be granted to run the script:
chmod +x /opt/steamcmd/csgo.sh
Now a systemd service entry is needed. The entry is made at: /etc/systemd/system/csgo.service
:
[Unit]
Description=Counter-Strike: Global Offensive Server (SRCDS)
After=local-fs.target network.target
[Service]
User=steamcmd
Group=steamcmd
ExecStart=/opt/steamcmd/csgo.sh start
ExecStop=/opt/steamcmd/csgo.sh stop
Type=forking
[Install]
WantedBy=multi-user.target
The entry just created must now be activated with the command systemctl daemon-reload
. Now the CSGO server can be started or stopped with systemctl start csgo
and systemctl stop csgo
.
To set up the automatic server update, the following entry at crontab -e
is required:
0 4 * * * systemctl stop csgo && su --shell /bin/bash steamcmd -c "/opt/steamcmd/csgo.sh update" && systemctl start csgo >/dev/null 2>&1
This entry would be executed every day at 4:00 AM.
Troubleshooting
Should there be any problems connecting to the screen
, you will see the following error:
Cannot open your terminal '/dev/pts/0' - please check.
To resolve this, execute this command in the current session:
script /dev/null
Afterwards a connection with the screen
session is possible again.
Conclusion
If you have followed the tutorial to this point, you have your own CSGO server that automatically updates itself.