LinuxGSM icon indicating copy to clipboard operation
LinuxGSM copied to clipboard

[BUG] ut99 multiple server

Open cclecle opened this issue 2 years ago • 5 comments

As a dedicated game server manager, I run into issue managing multiple instance of ut99 ded server. I am using systemd to launch them, and their is like a "mix" beetween process Ids. It start ok, but stop/restart do not work individually , Its like they all stop together.

Systemd status result sample (1st instance, 3 in total):

systemctl status ut99server
* ut99server.service - ut99server Server
   Loaded: loaded (/etc/systemd/system/ut99server.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2022-01-23 17:52:19 CET; 31s ago
  Process: 17343 ExecStart=/home/ut99server/ut99server start (code=exited, status=0/SUCCESS)
 Main PID: 18262 (tmux: server)
    Tasks: 8 (limit: 4915)
   Memory: 295.1M
   CGroup: /system.slice/ut99server.service
           |-18262 tmux new-session -d -x 80 -y 23 -s ut99server  ./ucc-bin server DM-Deck16][?Mutator=MapVoteULv2_3.BDBMapVote,UTCmds2.UTCmds,SmartSB101k.SmartSB,  -SETHOMEDIR=/home/ut99server/serverfiles/Systems/ut99server/ ini=/home/ut99server/serverfiles/Sy
           |-18263 ./ucc-bin server DM-Deck16][?Mutator=MapVoteULv2_3.BDBMapVote,UTCmds2.UTCmds,SmartSB101k.SmartSB, -SETHOMEDIR=/home/ut99server/serverfiles/Systems/ut99server/ ini=/home/ut99server/serverfiles/System/ut99server.ini
           |-18268 cat
           |-19220 ./ucc-bin server MA-Predator?Mutator=MapVoteULv2_3.BDBMapVote,UTCmds2.UTCmds,SmartSB101k.SmartSB, -SETHOMEDIR=/home/ut99server/serverfiles/Systems/ut99server-2/ ini=/home/ut99server/serverfiles/System/ut99server-2.ini
           |-19225 cat
           |-20168 ./ucc-bin server DM-Pyramid?Mutator=MapVoteULv2_3.BDBMapVote,UTCmds2.UTCmds,SmartSB101k.SmartSB,NIUT124.NIUTMutator -SETHOMEDIR=/home/ut99server/serverfiles/Systems/ut99server-3/ ini=/home/ut99server/serverfiles/System/ut99server-3.ini
           `-20173 cat

You can see the 3 instances are reported, which is not the desired behavior. Others instances have:

systemctl status ut99server-3
* ut99server-3.service - ut99server Server 3
   Loaded: loaded (/etc/systemd/system/ut99server-3.service; enabled; vendor preset: enabled)
   Active: active (exited) since Sun 2022-01-23 17:52:34 CET; 5min ago
  Process: 19248 ExecStart=/home/ut99server/ut99server-3 start (code=exited, status=0/SUCCESS)

Jan 23 17:52:28 GAME-UT99 systemd[1]: Starting ut99server Server 3...
Jan 23 17:52:34 GAME-UT99 ut99server-3[19248]: [94B blob data]
Jan 23 17:52:34 GAME-UT99 systemd[1]: Started ut99server Server 3.

systemd service extract (all 3 are writen the same way):

[Unit]
Description=ut99server Server 2
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
User=ut99server
WorkingDirectory=/home/ut99server
ExecStart=/home/ut99server/ut99server-2 start
ExecStop=/home/ut99server/ut99server-2 stop
TimeoutSec=15
KillMode=process
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Basic info

  • Distro: [Debian 10]
  • Game: [Unreal Tournament 99]
  • Command: [systemctl]
  • LinuxGSM version: [v20.1.3]

cclecle avatar Jan 23 '22 17:01 cclecle

problem seems to be related to Tmux session being the same for all game instance...

cclecle avatar Jan 23 '22 17:01 cclecle

Well, if you're saying that it's about tmux, did you keep that in mind? https://docs.linuxgsm.com/features/multiple-game-servers#installing-game-servers-with-the-same-script-name-under-the-same-user

Claiyc avatar Jan 23 '22 17:01 Claiyc

Thank you for the link, I know that.

My installation is up and running since 2 years with no problem since... tmux, It tooked me time to figure out it was related, I was thinking something was wrong with ucc update.. Finally, tmux handling was the root cause because we are using the same tmux server for all game server instances, and systemd think they are all the same... I can confirm it is not only limited to ut99, I have same behavior with ut2004.

I just analyzed the lgsm code and found a quick solution, which hopefully work fine with ut99 but might need more test with all other games..

In command_start.sh, command_stop.sh and check_status.sh, change tmux <some options> by: tmux -L "${sessionname}" <some options>

This will create a new tmux with private pid for every game server instances, making systemd happy ... :)

Will test it on ut2k4 and co4.

Modifyed files:

command_start.sh.txt command_stop.sh.txt check_status.sh.txt

cclecle avatar Jan 23 '22 18:01 cclecle

I can confirm it work just fine with ut99, ut2k4 and cod4 ! Now I can start/stop/restart each instance without killing others, like in old screen time ;)

cclecle avatar Jan 23 '22 18:01 cclecle

PR #3767 opened

cclecle avatar Jan 29 '22 11:01 cclecle