Chi vuole gestire un server dedicato di Rust, scaricare una mod pesante dal Workshop o automatizzare l’aggiornamento di un server CS2 prima o poi finisce sulla stessa pagina: quella di SteamCMD. È lo strumento a riga di comando che Valve mette a disposizione da anni per installare, aggiornare e gestire contenuti Steam senza passare dal client grafico, ma la documentazione ufficiale resta scarna e piena di codici di errore poco spiegati.
In questa guida, aggiornata al 26 settembre 2026, vediamo passo per passo come installare SteamCMD su Windows, Linux e Steam Deck, come scaricare un server dedicato reale (useremo Rust come esempio, App ID 258550), come automatizzare gli aggiornamenti con cron e systemd, e come evitare gli errori più comuni che bloccano l’installazione. Alla fine trovi anche un progetto completo pronto da copiare: un server Rust che si aggiorna da solo, gira con un utente dedicato invece che come root, e riparte automaticamente in caso di crash.
Cos’è SteamCMD e perché ogni gamer dovrebbe conoscerlo
SteamCMD è la versione a riga di comando del client Steam. Secondo la documentazione ufficiale della Valve Developer Community, il suo scopo è permettere l’accesso ai servizi Steam e il download di contenuti senza dover avviare l’interfaccia grafica del client (developer.valvesoftware.com/wiki/SteamCMD). In pratica è un eseguibile che accetta comandi testuali: ti autentichi, scegli una cartella di destinazione, indichi l’App ID del contenuto che vuoi e lui scarica tutto senza bisogno di clic o finestre.
Il caso d’uso più comune è l’installazione di server dedicati: Rust, 7 Days to Die, Counter-Strike 2, ARK Survival Evolved e Satisfactory offrono tutti un pacchetto server scaricabile con SteamCMD, spesso in accesso anonimo. La documentazione Steamworks per gli sviluppatori spiega che l’App ID del server dedicato e i relativi depot vengono aggiunti al pacchetto SteamCMD anonimo (pkg 17906), così da poter essere scaricati senza credenziali (partner.steamgames.com/doc/sdk/uploading/distributing_gs). Il secondo caso d’uso è il download di contenuti Workshop su un server headless, dove non ha senso installare l’intero client Steam solo per scaricare una mod. Il terzo, meno noto ai giocatori ma centrale per gli sviluppatori, è l’automazione: pipeline di build e continuous integration che aggiornano un gioco o un server ogni notte senza intervento umano.
Vale la pena chiarire subito una distinzione che genera confusione: SteamCMD non è lo Steamworks SDK. Il primo è uno strumento di distribuzione e installazione, il secondo è il kit che gli sviluppatori usano per integrare un gioco con le funzioni multiplayer di Steam, incluse le API per i server di gioco (partner.steamgames.com/doc/features/multiplayer). Per chi vuole solo installare e mantenere aggiornato un server dedicato, serve unicamente SteamCMD.
Un aspetto pratico che pochi considerano prima di partire: SteamCMD scarica i file dagli stessi server di distribuzione (CDN) usati dal client grafico normale, quindi la velocità di download dipende dalla tua connessione e dal carico sui nodi Valve più vicini, non dallo strumento in sé. Non esiste un modo per “forzare” un download più veloce oltre a scegliere orari con meno traffico, tipicamente di notte, cosa che torna utile quando pianifichi le finestre di aggiornamento automatico più avanti in questa guida. Per un server con community numerosa, questo dettaglio conta: un aggiornamento lanciato alle 20 in un giorno di picco può richiedere il doppio del tempo rispetto allo stesso comando lanciato alle 5 del mattino.
Prerequisiti: cosa ti serve prima di iniziare
Prima di scaricare l’eseguibile, verifica di avere tutto il necessario. SteamCMD in sé pesa pochi megabyte, ma il server o la mod che scaricherai dopo possono arrivare a diversi gigabyte, e la differenza tra un’installazione fluida e una piena di errori spesso sta proprio nei dettagli elencati qui sotto.
| Requisito | Valore consigliato | Note |
|---|---|---|
| Sistema operativo | Windows 10/11, Ubuntu 22.04+ o SteamOS 3.x | macOS supportato solo per alcuni giochi, verifica caso per caso |
| Spazio su disco | Dimensione del server + 20-30% libero | Serve margine per file temporanei e aggiornamenti in corso |
| RAM minima | 2 GB per SteamCMD, variabile per il server | Un server Rust consigliato parte da 4-8 GB dedicati |
| Connessione | Banda stabile in download | I depot di alcuni giochi superano i 10 GB |
| Librerie 32-bit (Linux) | Architettura i386 abilitata | SteamCMD e diversi server dedicati usano ancora binari a 32 bit |
| Account Steam | Facoltativo per l’accesso anonimo | Obbligatorio per giochi che richiedono possesso o licenza |
| Permessi directory | Utente non privilegiato con accesso in scrittura | Evita di eseguire tutto come root o amministratore |
Un punto spesso trascurato riguarda proprio le librerie a 32 bit su Linux: molte distribuzioni moderne installano di default solo pacchetti a 64 bit, e SteamCMD fallisce silenziosamente se mancano le dipendenze i386. Lo vedremo nel dettaglio nel passo dedicato all’installazione su Ubuntu.
Passo 1 – Controlla i requisiti hardware e lo spazio su disco
Prima di installare qualsiasi cosa, controlla quanto spazio hai davvero a disposizione. Su Linux i comandi utili sono df per lo spazio su disco e free per la memoria:
df -h /srv/servers
df -i /srv/servers
free -h
Il secondo comando (df -i) controlla gli inode disponibili, non solo lo spazio in byte: su filesystem con moltissimi file piccoli (tipico di mod pesanti dal Workshop) puoi esaurire gli inode prima ancora di riempire il disco, e l’errore che ne risulta è tutt’altro che intuitivo da diagnosticare. Come regola pratica, non dimensionare mai il disco esattamente sulla dimensione dichiarata del server: durante un aggiornamento SteamCMD può temporaneamente tenere in parallelo vecchi e nuovi file, quindi un margine del 20-30% evita brutte sorprese a metà download.
Passo 2 – Installa SteamCMD sul tuo sistema operativo
Il metodo di installazione cambia parecchio a seconda del sistema. Qui sotto trovi le tre strade più comuni: Windows, Linux/Ubuntu e Steam Deck.
Windows: il metodo ufficiale
Su Windows il procedimento è il più semplice dei tre: scarichi l’archivio SteamCMD dal sito Valve, lo estrai in una cartella dedicata (evita C:\Program Files\ se l’account che userai non ha permessi elevati) e lanci steamcmd.exe almeno una volta per lasciare che si aggiorni da solo. Una struttura di cartelle pulita aiuta a non fare confusione quando gestisci più server:
C:\SteamCMD\
C:\Servers\Rust\
C:\Servers\CS2\
Un’installazione completa via riga di comando, senza interazione manuale, assomiglia a questa:
C:\SteamCMD\steamcmd.exe ^
+force_install_dir C:\Servers\Rust ^
+login anonymous ^
+app_update 258550 validate ^
+quit
Ricorda di aprire le porte necessarie sul Windows Firewall, sia per SteamCMD sia per il server che installerai: senza questa configurazione i giocatori non riusciranno a connettersi anche se il server risulta avviato correttamente.
Linux e Ubuntu: pacchetto o archivio Valve
Su Ubuntu a 64 bit, SteamCMD e diverse sue dipendenze richiedono componenti a 32 bit. Il primo passo, prima ancora di installare il pacchetto, è abilitare l’architettura i386:
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install steamcmd
Il nome esatto del pacchetto e la sua disponibilità nei repository possono variare tra le versioni di Ubuntu. In alternativa, o se il pacchetto non è disponibile nella tua distribuzione, puoi scaricare l’archivio ufficiale e installarlo manualmente, per esempio in /opt/steamcmd. In quel caso l’esecuzione non interattiva è identica nella forma, cambia solo l’eseguibile richiamato:
/opt/steamcmd/steamcmd.sh \
+force_install_dir /srv/servers/7dtd \
+login anonymous \
+app_update 294420 \
+quit
Per gestire più server, tieni ogni installazione in una directory separata sotto /srv/servers/: rende molto più semplice sia il backup selettivo sia la diagnosi quando qualcosa va storto in uno solo dei server.
Steam Deck e SteamOS: attenzione alla partizione immutabile
SteamOS è basato su Arch Linux, ma a differenza di una distribuzione desktop tradizionale è pensata per essere immutabile: gli aggiornamenti di sistema possono sovrascrivere o ripristinare parti della partizione root, quindi installare SteamCMD modificando direttamente il sistema è una cattiva idea che rischia di sparire al primo update di SteamOS.
La strada più pratica è lavorare in Desktop Mode e installare SteamCMD in una directory della home utente, che sopravvive agli aggiornamenti di sistema:
mkdir -p /home/deck/steamcmd
cd /home/deck/steamcmd
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
./steamcmd.sh +quit
Se ti serve un server sempre acceso e raggiungibile, considera comunque di spostarlo su una macchina Linux dedicata: lo Steam Deck resta un dispositivo portatile pensato per giocare, non per fare da host permanente a un server pubblico. Dopo ogni aggiornamento di SteamOS, verifica che il metodo scelto sia ancora funzionante prima di fare affidamento su un aggiornamento automatico programmato.
Passo 3 – Primo avvio: login anonimo vs account autenticato
Molti server dedicati pubblici si scaricano senza associare alcun account Steam, usando l’accesso anonimo:
login anonymous
L’accesso anonimo, però, non garantisce l’accesso a ogni applicazione: alcuni giochi richiedono un account che possieda effettivamente il titolo, oppure credenziali con diritti specifici sul prodotto. In quel caso il login cambia forma:
login nomeutente
SteamCMD chiederà la password e, se hai attivato Steam Guard, anche il codice di verifica. Qui vale una regola di sicurezza semplice ma spesso ignorata: non inserire mai la password direttamente dentro uno script salvato su disco. Oltre a restare visibile nella cronologia della shell e nei log dei processi, un file con credenziali in chiaro è il primo bersaglio in caso di accesso non autorizzato alla macchina. SteamCMD salva un token di sessione dopo il primo login riuscito, quindi nella maggior parte dei casi basta autenticarsi manualmente una volta e lasciare che gli aggiornamenti successivi in accesso anonimo o con sessione salvata procedano senza reinserire la password ogni volta.
Passo 4 – I comandi fondamentali: force_install_dir e app_update
Due comandi coprono la stragrande maggioranza dei casi d’uso pratici. Il primo, force_install_dir, imposta la cartella dove SteamCMD scaricherà i file:
+force_install_dir /srv/servers/valheim
Usa sempre un percorso assoluto, soprattutto dentro script e unit systemd: un percorso relativo dipende dalla directory da cui lanci il comando, e in un servizio automatizzato questo può portare a installare i file nel posto sbagliato senza nessun errore evidente. La directory indicata deve essere scrivibile dall’utente che esegue SteamCMD.
Il secondo comando, app_update, installa o aggiorna l’applicazione indicata tramite il suo App ID:
app_update <appid>
Aggiungendo validate, SteamCMD verifica ogni file già presente e riscarica quelli danneggiati o mancanti:
app_update 730 validate
La differenza pratica è che la prima installazione, o un controllo di integrità dopo un crash sospetto, dovrebbe sempre includere validate. Gli aggiornamenti di routine, invece, non ne hanno bisogno: validare ogni file a ogni esecuzione automatica allunga inutilmente i tempi e consuma banda. Per chi segue un ramo beta di un server, la sintassi si estende così:
app_update <appid> -beta <nome-ramo> -betapassword <password>
Passo 5 – Scarica il tuo primo server dedicato (Rust, App ID 258550)
Mettiamo insieme quanto visto finora per scaricare un server reale. Rust è un buon esempio perché il suo server dedicato è tra i più cercati e usa un flusso di comandi tipico:
steamcmd \
+force_install_dir /srv/servers/rust \
+login anonymous \
+app_update 258550 validate \
+quit
Al termine, l’output nel terminale dovrebbe somigliare a questo (i numeri variano a seconda della versione corrente del gioco):
Success! App '258550' fully installed.
Se invece l’ultima riga riporta un messaggio di errore, prima di cercare soluzioni complicate scorri verso l’alto nel log: quasi sempre la causa reale è in una riga precedente, non nell’ultimo messaggio mostrato. Nella sezione dedicata agli errori più comuni trovi come leggere questi messaggi in modo sistematico.
Passo 6 – Scarica mod e contenuti dal Workshop
Per scaricare un singolo elemento del Steam Workshop, per esempio una mod da installare su un server che supporta il Workshop, il comando è:
workshop_download_item <appid_gioco> <publishedfileid>
Un esempio completo, usando l’App ID di un gioco e l’ID pubblico di un elemento Workshop:
steamcmd \
+login anonymous \
+workshop_download_item 346110 1234567890 \
+quit
Il primo numero è l’App ID del gioco a cui appartiene la mod, il secondo è il PublishedFileId dell’elemento Workshop, visibile nell’URL della pagina della mod su Steam. Non tutti i giochi permettono il download anonimo dei contenuti Workshop: se ricevi un errore di accesso negato, la causa più probabile è proprio questa, e la soluzione è autenticarti con un account che possiede il gioco.
Un dettaglio pratico che risparmia tempo quando devi scaricare più mod insieme: puoi incatenare più comandi workshop_download_item nella stessa sessione di SteamCMD, uno dopo l’altro, prima del +quit finale. In questo modo la sessione resta autenticata una sola volta e scarica tutta la lista in sequenza, invece di riavviare SteamCMD e rifare il login per ogni singolo elemento della collezione.
Passo 7 – Automatizza gli aggiornamenti
Aggiornare un server a mano ogni volta che esce una patch non è sostenibile. Qui vediamo tre livelli di automazione, da uno script semplice fino a una configurazione systemd completa.
Uno script bash idempotente
Uno script di aggiornamento dovrebbe poter girare più volte di fila senza mai danneggiare l’installazione esistente. Questo è un punto di partenza solido:
#!/usr/bin/env bash
set -Eeuo pipefail
STEAMCMD=/opt/steamcmd/steamcmd.sh
INSTALL_DIR=/srv/servers/rust
APPID=258550
"$STEAMCMD" \
+force_install_dir "$INSTALL_DIR" \
+login anonymous \
+app_update "$APPID" \
+quit
Alcune buone pratiche da rispettare: percorsi sempre assoluti, output reindirizzato su un file di log, controllo del codice di uscita dopo l’esecuzione, ed evitare validate a ogni run automatico se non strettamente necessario. Per impedire che due esecuzioni si sovrappongano (per esempio uno script lanciato da cron che parte prima che il precedente sia finito), aggiungi un lock con flock:
flock -n /run/lock/rust-update.lock \
/opt/steamcmd/steamcmd.sh \
+force_install_dir /srv/servers/rust \
+login anonymous \
+app_update 258550 \
+quit
Pianifica con cron
Per un controllo periodico degli aggiornamenti, una riga di crontab è sufficiente:
15 5 * * * /usr/local/sbin/update-rust.sh >> /var/log/rust-update.log 2>&1
Cron ha un limite importante: non sa se il server è ancora in esecuzione mentre lo script prova ad aggiornarlo. Lo script richiamato dovrebbe quindi occuparsi di fermare il servizio in modo ordinato, attendere la chiusura effettiva del processo, eseguire SteamCMD, riavviare il servizio e notificare eventuali errori, in questo ordine.
Gestisci il servizio con systemd
Per il processo principale del server, systemd è generalmente preferibile a cron perché gestisce anche i riavvii in caso di crash. Una unit di base per il server Rust:
[Unit]
Description=Rust dedicated server
After=network-online.target
Wants=network-online.target
[Service]
User=rust
Group=rust
WorkingDirectory=/srv/servers/rust
ExecStart=/srv/servers/rust/RustDedicated -batchmode
Restart=on-failure
RestartSec=10
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Per l’aggiornamento vero e proprio, crea un’unità separata (per esempio rust-update.service) abbinata a un timer se vuoi una pianificazione ricorrente in stile systemd invece di cron. Non collegare mai il riavvio automatico del server direttamente al termine dell’aggiornamento senza coordinare salvataggi, backup e comunicazione ai giocatori connessi: un riavvio a sorpresa durante una sessione attiva è una delle cause più comuni di lamentele da parte della community.
Passo 8 – Metti in sicurezza SteamCMD: utente dedicato invece di root
SteamCMD e il server dedicato non dovrebbero mai girare come root, se non per una necessità specifica e temporanea. Un account dedicato limita i danni nel caso in cui il server, una mod scaricata dal Workshop o una dipendenza compromessa vengano sfruttati per eseguire codice non autorizzato.
sudo useradd --system --home /srv/servers/rust \
--create-home --shell /usr/sbin/nologin rust
sudo chown -R rust:rust /srv/servers/rust
Alcuni principi da seguire quando metti in produzione un server gestito con SteamCMD:
- Un account di sistema separato per ogni server, o al massimo per ogni gruppo di server correlati.
- Directory di installazione non scrivibili da utenti non autorizzati sulla stessa macchina.
- Nessun
sudoindiscriminato dentro gli script di aggiornamento automatico. NoNewPrivileges=truenelle unit systemd, come mostrato nell’esempio precedente.- Firewall configurato con solo le porte effettivamente necessarie aperte.
- Backup dei salvataggi conservato fuori dalla directory del server, non solo al suo interno.
- Credenziali e token mai salvati dentro script versionati o repository.
Se SteamCMD deve scrivere in una directory con permessi particolari, la soluzione corretta è correggere proprietà e permessi di quella directory, non eseguire l’intero processo con privilegi elevati. Vale anche la pena controllare periodicamente chi ha accesso in scrittura alla cartella del server: con il tempo capita che permessi troppo larghi vengano concessi per risolvere un problema momentaneo e poi non vengano mai più ristretti, lasciando una porta aperta che nessuno ricorda più di aver lasciato socchiusa.
Progetto completo: un server Rust automatizzato da zero alla produzione
Mettiamo insieme tutti i pezzi visti finora in un progetto funzionante che puoi copiare e adattare. L’obiettivo: un server Rust dedicato che si installa con un comando, gira con un utente non privilegiato, riparte da solo in caso di crash e si aggiorna in automatico in una finestra di manutenzione fissa.
Primo: crea l’utente di sistema e le cartelle.
sudo useradd --system --home /srv/servers/rust \
--create-home --shell /usr/sbin/nologin rust
sudo mkdir -p /srv/servers/rust /opt/steamcmd
sudo chown -R rust:rust /srv/servers/rust
Secondo: installa SteamCMD e scarica il server per la prima volta, con validate perché è la prima installazione.
cd /opt/steamcmd
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | sudo tar zxvf -
sudo -u rust /opt/steamcmd/steamcmd.sh \
+force_install_dir /srv/servers/rust \
+login anonymous \
+app_update 258550 validate \
+quit
Terzo: crea l’unità systemd per il processo di gioco, identica a quella vista nel passo precedente, e abilitala all’avvio automatico.
sudo systemctl daemon-reload
sudo systemctl enable --now rust.service
sudo systemctl status rust.service
Quarto: crea lo script di aggiornamento visto nel Passo 7, salvalo in /usr/local/sbin/update-rust.sh, rendilo eseguibile e collegalo a cron in una fascia oraria a basso traffico, per esempio le 5 del mattino.
sudo chmod +x /usr/local/sbin/update-rust.sh
echo "15 5 * * * /usr/local/sbin/update-rust.sh >> /var/log/rust-update.log 2>&1" | sudo crontab -u rust -
Quinto e ultimo: verifica che tutto funzioni davvero, non solo che i comandi non abbiano restituito errori.
sudo systemctl is-active rust.service
tail -n 50 /var/log/rust-update.log
df -h /srv/servers/rust
Con questi cinque blocchi hai un server che si autoripara in caso di crash (grazie a Restart=on-failure), si aggiorna da solo ogni notte, gira con un utente dedicato invece che come root, e lascia una traccia scritta di ogni aggiornamento nel file di log. È lo stesso schema che puoi replicare per Palworld, 7 Days to Die o qualunque altro server basato su SteamCMD, cambiando solo App ID, percorsi ed eseguibile del server.
Tabella App ID: i server dedicati più cercati nel 2026
Gli App ID cambiano raramente, ma branch, requisiti di login e metodi di distribuzione possono variare nel tempo: controlla sempre la pagina ufficiale del gioco prima di lanciare un aggiornamento in produzione.
| Gioco / server | App ID | Note sull’accesso |
|---|---|---|
| Rust Dedicated Server | 258550 | Accesso anonimo, uso di validate consigliato alla prima installazione |
| 7 Days to Die Dedicated Server | 294420 | Supporta branch come latest_experimental |
| Counter-Strike 2 Dedicated Server | 730 | Può richiedere login anonimo o con account a seconda della configurazione |
| ARK: Survival Evolved Dedicated Server | 376030 | Presente nella lista ufficiale Valve dei server dedicati |
| Satisfactory Dedicated Server | 1690800 | Presente nella lista ufficiale Valve, installabile via SteamCMD |
| Valheim, Palworld, ARK: Survival Ascended | Da verificare | App ID del server distinto da quello del gioco client: controlla sempre la documentazione ufficiale aggiornata |
| Minecraft Bedrock Dedicated Server | Non applicabile | Distribuito da Mojang/Microsoft, non tramite app_update di SteamCMD |
La lista completa e sempre aggiornata dei server dedicati distribuiti da Valve è consultabile sulla pagina ufficiale Dedicated Servers List, mentre per Rust nello specifico la pagina Rust Dedicated Server riporta i parametri di avvio supportati. Per CS2, la pagina Counter-Strike 2 Dedicated Servers spiega la procedura completa, incluse le differenze rispetto ai vecchi server basati su Source.
Se il gioco che ti interessa non compare in questa tabella, il modo più affidabile per trovare l’App ID corretto del server dedicato è consultare la pagina Steamworks del prodotto o cercare direttamente il nome del gioco seguito da “dedicated server appid” su un motore di ricerca: quasi sempre la community del gioco ha già documentato il numero esatto in un forum ufficiale o in un wiki, e prendere quel valore da una fonte verificata evita di confondere l’ID del client con quello del server, l’errore di configurazione più comune in assoluto tra chi prova SteamCMD per la prima volta.
Errori comuni e pitfall da evitare
Errori e codici SteamCMD più frequenti
I codici di errore di SteamCMD non sono sempre documentati in modo chiaro da Valve: il messaggio completo e le righe di log precedenti sono più utili del solo codice numerico. Ecco gli otto problemi più comuni che incontri durante l’uso reale dello strumento.
- Errore 0x202: spesso legato ad accesso, rete o directory. Controlla connessione e DNS, firewall o VPN attivi, correttezza dell’App ID, permessi sulla cartella di destinazione e spazio libero su disco.
- Errore 0x602: compare durante download o aggiornamento quando il client non riesce a completare l’operazione. Verifica cache o stato locale danneggiato, file parziali, permessi insufficienti e interruzioni di rete. Fermare SteamCMD, correggere i permessi e riprovare risolve la maggior parte dei casi.
- App failed to install: controlla di star usando l’App ID del server dedicato e non quello del gioco client, che sono quasi sempre due numeri diversi.
- Failed to install app (messaggio generico): verifica App ID e ramo beta, autenticazione, directory esistente e scrivibile, filesystem non montato in sola lettura, quota disco e proxy o firewall che blocca le connessioni.
- Librerie a 32 bit mancanti su Linux: su Ubuntu e distribuzioni simili, dimenticare
dpkg --add-architecture i386prima di installare è la causa più frequente di fallimenti silenziosi al primo avvio. - Permessi negati sulla directory di installazione: succede quando
force_install_dirpunta a un percorso di proprietà di un altro utente, tipicamente dopo aver cambiato account di sistema senza aggiornare i permessi conchown. - Download Workshop che si blocca su accesso anonimo: non tutti i giochi permettono di scaricare contenuti Workshop senza un account che possieda il titolo: la soluzione è autenticarsi con credenziali valide.
- Filesystem in sola lettura su Steam Deck: capita quando si prova a installare direttamente sulla partizione di sistema di SteamOS invece che nella home utente, che è pensata per restare scrivibile tra un aggiornamento e l’altro.
Una buona abitudine, prima ancora di rincorrere il codice di errore specifico, è salvare sempre l’output completo di SteamCMD su file invece di leggerlo solo a schermo: aggiungendo un semplice reindirizzamento come >> /var/log/steamcmd.log 2>&1 in coda al comando, ti ritrovi una cronologia consultabile anche ore dopo, utile soprattutto quando l’errore si presenta in un aggiornamento notturno automatico e nessuno era davanti al terminale nel momento esatto in cui è comparso. Per una diagnosi più approfondita quando un errore generico non basta a capire cosa non va, puoi eseguire un comando diagnostico che stampa le informazioni sull’app prima di tentare l’installazione:
steamcmd \
+force_install_dir /srv/test-server \
+login anonymous \
+app_info_update 1 \
+app_info_print <appid> \
+app_update <appid> validate \
+quit
5 errori che (quasi) tutti commettono con SteamCMD
Oltre ai codici di errore veri e propri, ci sono abitudini sbagliate che non generano un errore immediato ma creano problemi più avanti.
- Eseguire tutto come root. Funziona, ma trasforma qualunque falla nel server o in una mod in un rischio per l’intera macchina.
- Salvare la password in chiaro dentro uno script. Resta visibile nella cronologia della shell, nei processi e in eventuali backup dello script stesso.
- Usare
validatea ogni singolo aggiornamento automatico. Serve alla prima installazione o dopo un crash sospetto, non a ogni run notturno: allunga i tempi e consuma banda senza reale beneficio. - Sovrascrivere
force_install_dirsu una cartella già occupata da altro. SteamCMD scriverà comunque, mescolando file che non c’entrano nulla tra loro. - Aggiornare senza avvisare i giocatori connessi. Un riavvio a sorpresa nel bel mezzo di una sessione è una delle cause più comuni di malumore nella community, ed è facilmente evitabile con una finestra di manutenzione fissa comunicata in anticipo.
- Confondere l’App ID del gioco client con quello del server dedicato. Sono quasi sempre numeri diversi, e usare quello sbagliato produce errori di installazione poco chiari.
- Leggere solo l’ultima riga del log. Il messaggio finale è spesso generico: la causa reale dell’errore quasi sempre compare qualche riga più sopra.
Consigli avanzati per chi vuole andare oltre
Una volta che il flusso base funziona, ci sono alcune ottimizzazioni che semplificano la gestione di più server o installazioni più complesse.
Se gestisci più server dello stesso gioco (per esempio due istanze Rust con mappe diverse), valuta un’installazione condivisa dei file base con symlink verso le rispettive cartelle di configurazione, invece di duplicare l’intera installazione: risparmi spazio su disco e tempo di aggiornamento, perché aggiorni una sola copia dei file binari. Per i rami beta protetti da password, ricorda che la sintassi -beta <nome> -betapassword <password> va sempre verificata sulla pagina ufficiale del gioco, perché non tutti i server dedicati espongono branch beta pubblici.
Per chi gestisce diversi server in produzione, integrare un backup automatico prima di ogni aggiornamento (con rsync o uno strumento di backup incrementale) riduce drasticamente il rischio di perdere salvataggi in caso di aggiornamento andato male. Allo stesso modo, se vuoi monitorare lo stato dei tuoi server con un sistema centralizzato, puoi affiancare a systemd uno strumento di log management: chi gestisce già un SIEM open source come Wazuh per la sicurezza della propria infrastruttura può facilmente aggiungere gli stessi log di aggiornamento SteamCMD alle regole di allerta esistenti, così da essere avvisato in tempo reale se un aggiornamento automatico fallisce ripetutamente.
Infine, se il tuo obiettivo è distribuire lo stesso server su più macchine in modo ripetibile, containerizzare l’installazione SteamCMD dentro un’immagine Docker (con l’utente non root già configurato nel Dockerfile) rende l’intero processo portabile e più semplice da versionare rispetto a script sparsi su ogni singola macchina fisica.
Un’ultima raccomandazione riguarda il monitoraggio dello spazio su disco nel tempo, non solo al momento dell’installazione: un server che accumula salvataggi, backup e log per mesi può avvicinarsi silenziosamente al limite della partizione, e un aggiornamento che fallisce per spazio esaurito nel mezzo della notte è tra gli scenari più fastidiosi da diagnosticare a distanza. Uno script di controllo lanciato prima dell’aggiornamento vero e proprio, che verifica lo spazio libero e interrompe l’operazione se scende sotto una soglia di sicurezza, evita di trovarsi con un’installazione a metà e nessun modo rapido per completarla.
SteamCMD vs pannelli di gestione: quando ha senso automatizzare di più
Tutto quello che abbiamo visto finora funziona con script bash, cron e systemd puri, senza alcun software aggiuntivo. Per chi gestisce uno o due server è spesso la soluzione più diretta: niente dipendenze extra, niente pannello web da mantenere aggiornato, controllo totale su ogni singolo comando eseguito. Esistono però strumenti pensati apposta per semplificare la gestione di più server contemporaneamente, e vale la pena sapere quando conviene passare a uno di questi invece di continuare ad ampliare i propri script.
LinuxGSM, per esempio, è un progetto open source che avvolge SteamCMD (e altri metodi di distribuzione) dentro un set di script già pronti per decine di giochi diversi, con comandi unificati per installare, aggiornare, avviare e monitorare i server. La differenza pratica rispetto agli script visti in questa guida non è tanto nelle funzionalità di base, che restano le stesse chiamate a app_update viste finora, quanto nella standardizzazione: se gestisci server per giochi diversi, non devi scrivere e mantenere uno script leggermente diverso per ciascuno. Il costo è una dipendenza in più da tenere aggiornata e uno strato di astrazione che, quando qualcosa va storto, richiede comunque di capire cosa succede sotto il cofano con SteamCMD.
Pannelli web come Pterodactyl o AMP vanno un passo oltre: aggiungono un’interfaccia grafica, gestione utenti multipli e permessi granulari, utile se altre persone del tuo team o della community devono poter riavviare il server senza accesso SSH alla macchina. Per un singolo amministratore che gestisce pochi server personali, l’overhead di installare e mantenere sicuro un pannello web aggiuntivo spesso non si giustifica rispetto a uno script systemd ben scritto come quello di questa guida. La scelta corretta dipende quindi dalla scala. Sotto i tre o quattro server, script diretti restano la soluzione più semplice da capire e da diagnosticare. Oltre quella soglia, o con più persone coinvolte nella gestione, uno strumento dedicato inizia a ripagare il tempo investito per configurarlo.
Domande frequenti
SteamCMD è gratuito?
Sì, è distribuito gratuitamente da Valve come strumento di supporto ai giocatori e agli sviluppatori che vogliono gestire server dedicati o automatizzare download di contenuti Steam.
Serve per forza un account Steam per usare SteamCMD?
No, molti server dedicati pubblici si scaricano con login anonymous. Un account diventa necessario solo per giochi che richiedono il possesso del titolo o per scaricare contenuti Workshop riservati.
SteamCMD funziona su Steam Deck?
Sì, ma va installato nella home utente in Desktop Mode e non sulla partizione di sistema, che è immutabile e viene sovrascritta agli aggiornamenti di SteamOS. Per un server sempre online è comunque preferibile una macchina Linux dedicata.
Come aggiorno un server senza disconnettere i giocatori a sorpresa?
Non esiste un aggiornamento realmente “a caldo” per la maggior parte dei server dedicati: la pratica corretta è fissare una finestra di manutenzione (per esempio di notte), avvisare la community in anticipo e far coincidere l’aggiornamento con un riavvio programmato del servizio.
Perché ricevo “Error! App failed to install” anche se l’App ID sembra corretto?
Le cause più comuni sono una directory di installazione non vuota o non scrivibile, spazio su disco insufficiente, o l’uso dell’App ID del gioco client invece di quello specifico del server dedicato.
Posso scaricare una mod dal Workshop senza account Steam?
Dipende dal gioco: alcuni permettono il download anonimo con workshop_download_item, altri richiedono un account che possieda il titolo. Se il download fallisce con un errore di accesso, prova ad autenticarti con un account valido.
Posso gestire più server con una sola installazione di SteamCMD?
Sì, SteamCMD non è legato a un singolo server: basta puntare force_install_dir a cartelle diverse per ogni server che vuoi installare o aggiornare, anche in sequenza nello stesso script.
È sicuro eseguire SteamCMD come utente root?
Funziona tecnicamente, ma non è consigliato: un account di sistema dedicato, senza privilegi di accesso alla shell, limita i danni in caso di compromissione del server o di una mod scaricata da terze parti.
Quanto spazio su disco serve davvero per un server Rust?
Il server dedicato base occupa diversi gigabyte, ma la cifra cresce in fretta con salvataggi, log e mod: pianifica sempre almeno il 20-30% di spazio libero oltre alla dimensione dichiarata e controlla periodicamente l’occupazione reale con df -h, non solo al momento dell’installazione iniziale.




