I have a GMod server on Ubuntu 18.04, and it runs fine when I run it via ./run_gmod.sh
(as the "steam" user, who owns the folder/files), whose contents are
#!/bin/sh
/datadrive/srcds/gmod/srcds_run -game garrysmod -console -norestart -strictportbind -port 27015 -tickrate 60 -maxplayers 20 \
+gamemode terrortown +map ttt_minecraft_b5 \
+host_workshop_collection 1413001823 \
+sv_setsteamaccount XXXXXXXXXXXX
However I want to install it as a service with systemctl so that it auto starts when the server (Azure VM) is started. I created a file at /etc/systemd/system/gmod.service
with the following content:
[Unit]
Description=Gmod Server
After=network.target
[Service]
User=steam
WorkingDirectory=/datadrive/srcds/
ExecStart=/datadrive/srcds/gmod/srcds_run -game garrysmod -console -norestart -strictportbind -port 27015 -tickrate 60 -maxplayers 20 +gamemode terrortown +map ttt_minecraft_b5 +host_workshop_collection 1413001823 +sv_setsteamaccount XXXXXXXXXXXX
[Install]
WantedBy=multi-user.target
However when I try systemctl start gmod
the logs I get are very strange:
Nov 27 22:54:49 Server1 systemd[1]: Started Gmod Server.
Nov 27 22:54:49 Server1 bash[4025]: Auto detecting CPU
Nov 27 22:54:49 Server1 bash[4025]: Using default binary: ./srcds_linux
Nov 27 22:54:52 Server1 bash[4025]: Setting breakpad minidump AppID = 4000
Nov 27 22:54:52 Server1 bash[4025]: [S_API] SteamAPI_Init(): Loaded 'steamclient.so' OK.
Nov 27 22:54:52 Server1 bash[4025]: Could not find steamerrorreporter binary. Any minidumps will be uploaded in-processapplicationmanager.cpp (3936) : Assertion Failed: CApplicationManager::GetMountVolume: invalid index
Nov 27 22:54:52 Server1 bash[4025]: CAppInfoCacheReadFromDiskThread took 0 milliseconds to initialize
Nov 27 22:54:52 Server1 bash[4025]: Uploading dump (in-process) [proxy '']
Nov 27 22:54:52 Server1 bash[4025]: /tmp/dumps/crash_20201127225452_4.dmp
Nov 27 22:54:52 Server1 bash[4025]: success = no
Nov 27 22:54:52 Server1 bash[4025]: error: libcurl.so: cannot open shared object file: No such file or directory
Nov 27 22:54:52 Server1 bash[4025]: applicationmanager.cpp (3936) : Assertion Failed: CApplicationManager::GetMountVolume: invalid index
Nov 27 22:54:52 Server1 bash[4025]: applicationmanager.cpp (4099) : Assertion Failed: m_vecInstallBaseFolders.Count() > 0
Nov 27 22:54:52 Server1 bash[4025]: CApplicationManagerPopulateThread took 0 milliseconds to initialize (will have waited on CAppInfoCacheReadFromDiskThread)
Nov 27 22:54:52 Server1 bash[4025]: [S_API FAIL] Tried to access Steam interface SteamUser020 before SteamAPI_Init succeeded.
Nov 27 22:54:56 Server1 bash[4025]: applicationmanager.cpp (4099) : Assertion Failed: m_vecInstallBaseFolders.Count() > 0
Nov 27 22:55:00 Server1 bash[4025]: [S_API] SteamAPI_Init(): Loaded 'steamclient.so' OK.
Nov 27 22:55:00 Server1 bash[4025]: CAppInfoCacheReadFromDiskThread took 0 milliseconds to initialize
Nov 27 22:55:00 Server1 bash[4025]: Could not find steamerrorreporter binary. Any minidumps will be uploaded in-processapplicationmanager.cpp (3936) : Assertion Failed: CApplicationManager::GetMountVolume: invalid index
Nov 27 22:55:00 Server1 bash[4025]: Uploading dump (in-process) [proxy '']
Nov 27 22:55:00 Server1 bash[4025]: /tmp/dumps/crash_20201127225500_5.dmp
Nov 27 22:55:00 Server1 bash[4025]: success = no
Nov 27 22:55:00 Server1 bash[4025]: error: libcurl.so: cannot open shared object file: No such file or directory
Nov 27 22:55:00 Server1 bash[4025]: applicationmanager.cpp (3936) : Assertion Failed: CApplicationManager::GetMountVolume: invalid index
Nov 27 22:55:00 Server1 bash[4025]: applicationmanager.cpp (3936) : Assertion Failed: CApplicationManager::GetMountVolume: invalid index
Nov 27 22:55:00 Server1 bash[4025]: applicationmanager.cpp (4099) : Assertion Failed: m_vecInstallBaseFolders.Count() > 0
Nov 27 22:55:00 Server1 bash[4025]: CApplicationManagerPopulateThread took 0 milliseconds to initialize (will have waited on CAppInfoCacheReadFromDiskThread)
Nov 27 22:55:09 Server1 bash[4025]: applicationmanager.cpp (4099) : Assertion Failed: m_vecInstallBaseFolders.Count() > 0
Nov 27 22:55:09 Server1 bash[4025]: httpclient.cpp (4181) : Assertion Failed: Failed writing http cache file to disk
Nov 27 23:00:42 Server1 systemd[1]: gmod.service: Current command vanished from the unit file, execution of the command list won't be resumed.
Normal logs, when starting through the run_gmod.sh
script, look like this:
Auto detecting CPU
Using default binary: ./srcds_linux
mount.cfg adding path: '/datadrive/srcds/gmod/content/css/cstrike'
Couldn't load shader dll: game_shader_generic_garrysmod_srv.soConVarRef mat_dxlevel doesn't point to an existing ConVar
Game_srv.so loaded for "Garry's Mod"
Setting breakpad minidump AppID = 4000
Initializing Steam libraries for Workshop..
[S_API] SteamAPI_Init(): Loaded 'steamclient.so' OK.
CApplicationManagerPopulateThread took 0 milliseconds to initialize (will have waited on CAppInfoCacheReadFromDiskThread)
CAppInfoCacheReadFromDiskThread took 2 milliseconds to initialize
[S_API FAIL] Tried to access Steam interface SteamUser020 before SteamAPI_Init succeeded.
WS: Waiting for Steam to log us in..
WS: Fetching collection info...
Processing collection 1413001823...
Collection 'TGN Reborn Content'
75 new addons
WS: Finished!
WS: Processing 75 addons...
and then more stuff happens
The logs diverge right after the second line (Using default binary: ./srcds_linux
), and I don't understand why the result is so different when it's the same command being run, just in different ways. Is this something specific to GMod, or is my gmod.service
file incorrect? I've tried looking this up but resources for running the server as a service are scarce the and example .service
files I found end up giving similar errors so I figured I should start from scratch.