Când Valve scoate un update de CS2 în mijlocul nopții, serverele care rulează versiunea veche sunt scoase instant din rețeaua publică. Jucătorii primesc eroare de conexiune, iar serverul tău rămâne gol până când apuci să te loghezi prin SSH și să îi dai manual update.
În loc să folosești loop-uri infinite în scripturi de screen sau să instalezi panouri complexe de management (cum e Pterodactyl) doar pentru un singur server, poți rezolva problema nativ în Linux. Folosim un script Bash simplu combinat cu un serviciu systemd.
De ce nu mai funcționează vechile metode de monitorizare din CS:GO
În CS:GO, administratorii foloseau scripturi vechi bazate pe executabilul srcds_run, care venea cu parametru de auto-update direct prin SteamCMD.
La CS2, structura s-a schimbat complet. Serverul rulează direct prin executabilul nativ de 64-biți (cs2 aflat în game/bin/linux64/). Nu mai avem srcds_run care să gestioneze crash-urile și actualizările la pornire. Dacă procesul moare sau cere update, sistemul de operare trebuie să se ocupe de asta.
Cea mai stabilă metodă este să lăsăm systemd să monitorizeze procesul, iar înainte de fiecare pornire să ruleze automat un script de verificare prin SteamCMD.
Pasul 1: Crearea scriptului Bash de verificare și update
Loghează-te pe utilizatorul care rulează serverul de CS2 (evită să rulezi serverul ca root) și creează un script numit update_cs2.sh în directorul tău home.
nano /home/cs2/update_cs2.sh
Adaugă următorul cod în fișier:
#!/bin/bash
# Definiți căile către directoarele voastre
STEAMCMD_PATH="/home/cs2/steamcmd/steamcmd.sh"
CS2_DIR="/home/cs2/server"
CS2_APPID="730"
echo "==============================================="
echo "[CS2] Se verifică actualizările via SteamCMD..."
echo "==============================================="
# Rulăm actualizarea. SteamCMD va descărca doar fișierele modificate.
$STEAMCMD_PATH +force_install_dir $CS2_DIR +login anonymous +app_update $CS2_APPID +quit
echo "[CS2] Verificare finalizată. Se pornește serverul..."
Salvează fișierul (Ctrl+O, apoi Enter) și închide-l (Ctrl+X). Fă scriptul executabil:
chmod +x /home/cs2/update_cs2.sh
Pasul 2: Configurarea serviciului Systemd pentru restart automat
Acum vom crea un serviciu de sistem care va rula serverul în fundal, îl va restarta instant dacă dă crash și va rula scriptul de update înainte de fiecare pornire.
Creează fișierul de configurare pentru serviciu folosind privilegii de root:
sudo nano /etc/systemd/system/cs2.service
Adaugă următoarea configurație (ajustează căile și utilizatorul după caz):
[Unit]
Description=CS2 Dedicated Server
After=network.target
[Service]
Type=simple
User=cs2
WorkingDirectory=/home/cs2/server/game/bin/linux64
# Rulăm scriptul de update înainte ca executabilul CS2 să pornească
ExecStartPre=/home/cs2/update_cs2.sh
# Comanda de start pentru server
ExecStart=/home/cs2/server/game/bin/linux64/cs2 -dedicated +ip 0.0.0.0 -port 27015 +map de_inferno -maxplayers 12
# Restart automat la crash
Restart=always
RestartSec=10
# Trimitem semnal corect de închidere când oprim serviciul
KillSignal=SIGINT
[Install]
WantedBy=multi-user.target
Salvează fișierul. Reîncarcă managerul de servicii systemd ca să recunoască noul serviciu:
sudo systemctl daemon-reload
Activează serviciul să pornească automat la boot-ul serverului fizic:
sudo systemctl enable cs2.service
Acum poți porni serverul simplu:
sudo systemctl start cs2.service
Automatizarea verificării: Punem un restart în Cron la ore sigure
Serviciul configurat mai sus va face update doar când serverul pornește sau când îi dai manual restart. Dacă serverul rulează de 3 zile și Valve scoate un update, jucătorii nu se vor mai putea conecta, dar serverul nu va ști singur să își dea restart pentru că procesul încă rulează în memorie.
Cea mai simplă și sigură metodă, fără să riști să întrerupi meciurile oamenilor la ore de vârf, este să pui un restart automat în cron la o oră moartă (de exemplu, la 5:00 dimineața).
Deschide tabela cron a utilizatorului root:
sudo crontab -e
Adaugă linia de mai jos la sfârșitul fișierului:
0 5 * * * systemctl restart cs2.service
În fiecare dimineață la 05:00, serviciul va primi comanda de restart. Înainte de a porni înapoi executabilul cs2, systemd va rula scriptul nostru update_cs2.sh care va descărca orice patch apărut în ultimele 24 de ore.
Cum testezi dacă totul funcționează corect
Nu vrei să aștepți următorul update de la Valve ca să vezi dacă ai configurat corect sistemul. Poți simula un crash și un restart manual foarte simplu.
1. Verifică logurile live
Poți vedea ce face serverul tău în timp real folosind journalctl:
sudo journalctl -u cs2.service -f
Ar trebui să vezi cum rulează scriptul SteamCMD, după care pornește motorul Source 2.
2. Testează comportamentul la crash
Află PID-ul procesului cs2 și omoară-l forțat (simulează un crash):
kill -9 $(pgrep cs2)
Urmărește din nou logurile cu journalctl. Vei vedea cum systemd detectează oprirea neașteptată a serviciului, așteaptă 10 secunde (conform setării RestartSec=10), rulează din nou scriptul de update și pornește serverul înapoi.
—
Voi ce metode folosiți pentru a evita restarturile brutale când aveți jucători activi pe server? Rulați o verificare prin rcon query înainte de cron restart sau preferați o simplă programare la ore târzii?