1

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.

ROODAY
  • 215
  • 2
  • 5
  • Look at the `WorkingDirectory=`. – Michael Hampton Nov 28 '20 at 00:36
  • What's the issue with the working directory? That's the location I'm in when I run the run_gmod.sh script (which is just the command in ExecStart). Should I remove the working directory line? – ROODAY Nov 29 '20 at 02:01
  • I suspect you need to set some Environment Variables in your service file. I'm putting this as a comment instead of an answer because I don't know which variables. – Moshe Katz Dec 03 '20 at 17:15

1 Answers1

0

It turns out that using the following systemd service file got it to work (more or less):

[Unit]
Description=Gmod Server
After=network.target

[Service]
User=rooday # the user I normally run run_gmod.sh with
ExecStart=/datadrive/srcds/run_gmod.sh
Restart=Always

[Install]
WantedBy=multi-user.target

The more or less is because run_gmod.sh starts the srcds_run (part of the srcds install) script with the parameters for my server, and that script itself runs the actual server binary after setting some environment variables. So now at least my server runs successfully with systemd, but journalctl tracks only srcds_run instead of the actual server binary which has all the important logs. But that's outside the scope of this question/can be phrased more generally than just for gmod so I'll consider this question answered.

ROODAY
  • 215
  • 2
  • 5