CS2 servers
Running the CS2 server
Keeping the game side alive: the plugin chain, what breaks when Valve ships an update, and how to tell which link failed.
This is the part FLICKED does not own. It coordinates servers, it does not install or provision them, so when a match will not start the cause is usually here rather than in the backend. Everything below has been hit in practice on a real server.
The chain#
Four things have to load, in order, and each one fails differently:
1 · Search path
gameinfo.gi
Restored to stock by every validate
2 · VDF loader
Metamod
Removed if its folder is gone
3 · .NET runtime
CounterStrikeSharp
Breaks on CS2 updates (offsets)
4 · Match plugin
MatchZy
Refuses a second match per process
Learning this chain is most of the job: the symptom tells you which link broke, and each has a different fix.
| What the console says | Which link | Meaning |
|---|---|---|
Unknown command 'meta' | gameinfo.gi | Metamod never loaded at all |
meta list works, lists nothing useful | Metamod → CSS | The CSS loader is missing or failed |
Unknown command 'css_plugins' | CounterStrikeSharp | CSS did not load, usually after a CS2 update |
css_plugins list works, no MatchZy | MatchZy | Plugin missing, or failed to load |
MatchZy listed as LOADED | None | The stack is healthy |
Health check#
Three commands in the server console, in this order. Stop at the first one that fails: that is your link.
meta list // is Metamod there, and does it list CounterStrikeSharp?
css_plugins list // is MatchZy LOADED?
status // which map, how many players, is the port rightUpdating after a CS2 patch#
CS2 updates itself for players. A dedicated server never does, and the symptom is "Your client is out of date" when someone tries to connect.
-
Finish or cancel any live match
FLICKED needs nothing from you here. After about ninety seconds of failed RCON pings the pool marks the server Offline and stops handing it matches; it returns to Idle by itself once the server answers again.
-
Update with SteamCMD
Windows& C:\steamcmd\steamcmd.exe +force_install_dir C:\cs2-server +login anonymous +app_update 730 validate +quitLinux/opt/steamcmd/steamcmd.sh +force_install_dir /opt/cs2 +login anonymous +app_update 730 validate +quit -
Put the Metamod search path back
validaterestoresgameinfo.gito stock, every time, which removes the line that loads Metamod. This is the single most common reason a server comes back with no plugins. Check before starting; nothing printed means the line is gone:PowerShellSelect-String -Path C:\cs2-server\game\csgo\gameinfo.gi -Pattern metamodAdd it above
Game csgo. Below it, Metamod will not load.game/csgo/gameinfo.giSearchPaths { Game csgo/addons/metamod Game csgo Game core -
Check the stack came back
meta list, thencss_plugins list. Ifmetaworks butcss_pluginsdoes not, read on.
CounterStrikeSharp and CS2 updates#
Expect CSS to break after a significant CS2 update. It reads game memory through offsets and schema definitions that shift whenever Valve changes the binaries, so a CSS build is tied to a game build. When that happens:
- Check CounterStrikeSharp's releases for a build naming the current CS2 version.
- If there is none yet, the schema fix usually lands in its repository before a release is cut. Building from source is a legitimate option and has been necessary before.
- Until CSS loads, no match can run. The backend will keep trying, failing and releasing the server, which is correct behaviour but looks alarming.
There is normally a lag of hours to days after a major update. Nothing to fix on the FLICKED side; wait for the plugin ecosystem.
What FLICKED needs from a server#
Less than you would expect. server.cfg needs no FLICKED-specific lines.
- RCON working, with the password you gave the dashboard. It is the only channel FLICKED uses to control the server.
- MatchZy loaded, nothing more. FLICKED sends the match config URL, the authentication header and the event-reporting settings over RCON when it starts a match.
Two behaviours worth knowing, both verified against the plugin's source and recorded in MatchZy integration:
- MatchZy accepts one match per process. FLICKED therefore sends
css_plugins reload MatchZybefore every match. That is deliberate, not a workaround to remove. - Events are never retried or deduplicated.
series_endcan arrive twice or not at all, which is why finishing a match is a claim on a row.
If you change the RCON password#
Update it in the dashboard as well. The stored copy is encrypted and cannot be read back for comparison, so the only symptom of a mismatch is the server dropping to Offline while being perfectly healthy.
Errors seen in practice#
| Error | Where to look |
|---|---|
Your client is out of date on connect | The server is behind; update it |
Unknown command 'meta' | The gameinfo.gi search path |
Unknown command 'css_plugins' | CSS not loaded, usually after a CS2 update |
FATAL ERROR: CAppSystemDict: Unable to create interface Source2ServerConfig001 | An invalid gameinfo.gi edit, or launching from the wrong directory. Compare against a stock copy first |
Failed to initialize Steamworks SDK for gameserver | The server cannot find its Steam client files. Reinstall through SteamCMD into the same folder and launch from the server's own directory |
| Server window opens and closes instantly | Run it from a console so the error survives; on Windows check the Visual C++ redistributable is installed |
| MatchZy says a match is already running | The per-process flag; reload the plugin or restart the server |
| Match loads the wrong map | The server fetched a config it could not reach, or MatchZy was never reloaded. Check Api:PublicUrl is an address the server can resolve |
Read both logs. FLICKED's log says what it sent and whether RCON answered; the game console says what the server did with it. Most confusion comes from looking at only one of them.
Keep it running#
A console window dies when you log out. On Windows, register it as a service with NSSM, or create a Task Scheduler task set to Run whether user is logged on or not with the trigger At startup. On Linux, use a systemd unit shaped like the ones in Deploy on Linux. It will reboot eventually, and you will not be watching.
Worth keeping a copy of#
- The
gameinfo.gisearch path line, restored to stock by everyvalidate server.cfgand any other config you have edited- The
addonsfolder, or a note of which Metamod and CSS versions are installed - Your launch command, including the GSLT token
Routine after every CS2 update#
- Update with SteamCMD
- Re-add the Metamod line to
gameinfo.gi - Start the server
meta list, thencss_plugins list- If CSS is broken, get a matching build before expecting matches
- Confirm the dashboard shows the server Idle, then run one match and watch it load the map
Step 6 is the only one that proves the whole path. The first five prove the server starts.