Skip to content

Instantly share code, notes, and snippets.

@justincjahn
Last active January 16, 2024 20:15
Show Gist options
  • Save justincjahn/4fe65b552b0622662420928cc8ffc7c0 to your computer and use it in GitHub Desktop.
Save justincjahn/4fe65b552b0622662420928cc8ffc7c0 to your computer and use it in GitHub Desktop.
Minecraft server(s) using systemd and screen.

Install

# Install dependencies
sudo yum install -y java-1.8.0-openjdk screen

# Create a new unprivileged user for minecraft
useradd -r -m -d /opt/minecraft minecraft

# Create the directory that will house our minecraft instances
sudo su --shell /bin/bash minecraft
mkdir instances
exit

# Copy the minecraft@.service file into the correct place.
sudo vi /etc/systemd/system/minecraft@.service

# Reload systemd units
sudo systemctl daemon-reload

Provision a new server

# Sudo into the minecraft user's shell
sudo su --shell /bin/bash minecraft

# Move into the instances directory
cd instances

# Create a new folder to house your instance
mkdir server1

# Install your minecraft instance, and make sure there is a minecraft_server.jar file.
# If you use Forge servers, you can use the following:
ln -s forge*.jar minecraft_server.jar

# Start and enable (start after boot) the server.
sudo systemctl start minecraft@server1
sudo systemctl enable minecraft@server1
[Unit]
Description=Minecraft Server: %i
After=network.target
[Service]
WorkingDirectory=/opt/minecraft/instances/%i
User=minecraft
Group=minecraft
Restart=always
ExecStart=/usr/bin/screen -DmS mc-%i /usr/bin/java -Xmx2G -jar minecraft_server.jar nogui
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN IN 15 SECONDS..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN IN 10 SECONDS..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN IN 5 SECONDS..."\015'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "save-all"\015'
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "stop"\015'
[Install]
WantedBy=multi-user.target
@sublok
Copy link

sublok commented Jan 24, 2022

Will this work with 1.18.1 java @user_jvm_args.txt @libraries/net/minecraftforge/forge/1.18.1-39.0.45/unix_args.txt "$@"?

@RAD750
Copy link

RAD750 commented Mar 16, 2022

To view the console su to minecraft with:

sudo su minecraft

then

screen -R mc-server1

Don't use sudo su. Instead, do sudo -u minecraft -s, or directly sudo -u minecraft screen -R mc-server1

Cheers

@mitcherthewitcher
Copy link

This thread helped me out. Thanks 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment