mirror of
https://github.com/MinecraftServerControl/mscs.git
synced 2024-11-15 23:08:18 -07:00
430 lines
17 KiB
Markdown
430 lines
17 KiB
Markdown
Minecraft Server Control Script
|
|
=============================
|
|
|
|
A powerful command-line control script for UNIX and Linux powered Minecraft servers.
|
|
|
|
|
|
# Index
|
|
* [Features](#features)
|
|
* [Prerequisites](#prerequisites)
|
|
* [Installation](#installation)
|
|
* [First-time Usage](#first-time-usage)
|
|
* [Server Customization](#server-customization)
|
|
* [License](LICENSE)
|
|
* [Issues](#issues)
|
|
|
|
|
|
## Features
|
|
* Run multiple Minecraft worlds.
|
|
* Start, stop, and restart single or multiple worlds.
|
|
* Create, delete, disable, and enable worlds.
|
|
* Includes support for additional server types: [Forge](http://www.minecraftforge.net/), [BungeeCord](http://www.spigotmc.org/wiki/bungeecord/), [SpigotMC](http://www.spigotmc.org/wiki/spigot/), etc.
|
|
* Users automatically notified of important server events.
|
|
* Uses the Minecraft [Query protocol](http:b //wiki.vg/Query) to keep track of current server conditions.
|
|
* LSB and systemd compatible init script, allows for seamless integration with your server's startup and shutdown sequences.
|
|
* Map worlds using the [Minecraft Overviewer](http://overviewer.org/) mapping software.
|
|
* Backup worlds, and remove backups older than X days.
|
|
* Update the server and client software automatically.
|
|
* Send commands to a world server from the command line.
|
|
|
|
See the [Usage](#usage) section below for a description on how to use these features.
|
|
|
|
|
|
## Prerequisites
|
|
Ensure that you have done the following before installing MSCS:
|
|
|
|
### Required Programs
|
|
We've made an attempt to utilize only features that are normally installed in
|
|
most Linux and UNIX environments in this script. However, there may be a few
|
|
requirements that this script has that may not already be in place:
|
|
* Java JRE - The Minecraft server software requires this.
|
|
* Perl - Most, if not all, Unix and Linux like systems have this
|
|
preinstalled.
|
|
* Python - Required by the Minecraft Overviewer mapping software.
|
|
* GNU Wget - Allows the script to download software updates via the
|
|
internet.
|
|
* rdiff-backup - Allows the script to efficiently run backups.
|
|
* Socat - Allows the script to communicate with the Minecraft server.
|
|
* Iptables - Although not explicitly required, a good firewall should be
|
|
installed.
|
|
|
|
If you are running Debian or Ubuntu, you can make sure that these are
|
|
installed by running:
|
|
|
|
sudo apt-get install default-jre perl python wget rdiff-backup socat iptables
|
|
|
|
### Configuring the Firewall / NAT
|
|
If you have a firewall installed on your computer, or a router using NAT
|
|
installed in your network, you will need to route some ports to your server.
|
|
Instructions on how to accomplish this are beyond the scope of this post, but
|
|
here are some things you will need to know:
|
|
* The default port for the Minecraft server is: `25565`.
|
|
* If you wish to run multiple world servers using this script, you will
|
|
want to open a range of ports (for example `25565 - 25575`).
|
|
|
|
See the [iptables.rules](iptables.rules)
|
|
file for a very basic set of rules that you can use with the Iptables firewall.
|
|
|
|
### Mapping Software (Optional)
|
|
The script uses the [Minecraft Overviewer](http://overviewer.org) mapping
|
|
software to generate maps of your worlds. Minecraft Overviewer is a
|
|
command-line tool for rendering high-resolution maps of Minecraft worlds. It
|
|
generates a set of static html and image files and uses the Google Maps API to
|
|
display a nice interactive map.
|
|
|
|
If you wish to use the mapping software, you can [download](http://overviewer.org/downloads) premade binaries for
|
|
supported systems, or build your own binary from source if needed.
|
|
|
|
Repositories for automatic installation are also available:
|
|
* [Debian/Ubuntu](http://overviewer.org/debian/info)
|
|
* [RHEL/CentOS/Fedora](http://overviewer.org/rpms/info)
|
|
|
|
## Installation
|
|
### Downloading the script
|
|
The easiest way to download the script is to make a clone of the [git
|
|
repository](https://github.com/sandain/MinecraftServerControlScript.git). You must have git installed first. To install git:
|
|
|
|
sudo apt-get install git
|
|
|
|
Then:
|
|
|
|
git clone https://github.com/sandain/MinecraftServerControlScript.git
|
|
|
|
Note that it will be downloaded into the current directory which you are working in.
|
|
|
|
##### Other ways to download
|
|
|
|
* Get the latest stable [release](https://github.com/sandain/MinecraftServerControlScript/releases).
|
|
|
|
* Get the development version as a [zip file](https://github.com/sandain/MinecraftServerControlScript/archive/master.zip):
|
|
|
|
wget https://github.com/sandain/MinecraftServerControlScript/archive/master.zip
|
|
|
|
|
|
|
|
### Configuration
|
|
|
|
Navigate to the `MinecraftServerControlScript` directory that you just downloaded. Configuration can be done with the included Makefile in Debian and
|
|
Ubuntu like environments by running:
|
|
|
|
sudo make install
|
|
Then, type
|
|
|
|
chmod -R u+w /opt/mscs
|
|
chown -R minecraft:minecraft /opt/mscs
|
|
This will give the user you created in the config (by default, the user `minecraft`) access to write in the `/opt/mscs` folder. If you configured MSCS manually when you installed the script, then replace `minecraft` with the name of the user you made.
|
|
|
|
That's it!
|
|
If you wish to configure the script manually, please visit the [wiki page](https://github.com/Roflicide/MinecraftServerControlScript/wiki/Manual-Configuration).
|
|
|
|
|
|
## First-time Usage
|
|
So you successfully installed the script--great!
|
|
|
|
At first, you probably want to [create a new world](#create-new-world) or [import an existing world](#import-existing-world) into the script.
|
|
|
|
Then, you should adjust the [ettings for the server](#adjusting-server-options) as needed.
|
|
|
|
### Create new world
|
|
The command to create a new world is:
|
|
|
|
mscs create [world] [port] <ip>
|
|
|
|
Where `world` is the name of the world you specify, and `port` is the server port (by default, use 25565).
|
|
`ip` is optional and will be used if you wish to create multiple worlds across different servers. For now, leave it blank.
|
|
|
|
Afterwards, simply start the server via `mscs start [world]` where `world` is the name of the world.
|
|
|
|
**Finally, accept the EULA**.
|
|
As of Minecraft version 1.7.10, Mojang requires that users of their software read and agree to their [EULA](https://account.mojang.com/documents/minecraft_eula). After the first time you start the server, you need to modify the `eula.txt` file in your world's folder, changing the value of the `eula` variable from `false` to `true`.
|
|
|
|
The EULA can be found in `/opt/mscs/worlds/myWorld` where `myWorld` is the name given to the world you created.
|
|
|
|
After accepting the EULA simply start the server using the same command above, and you're all set!
|
|
|
|
### Import existing world
|
|
Suppose you want to import a world folder named `world` into MSCS, and that you want MSCS to recognize this world by the name "vanillaMC".
|
|
|
|
1. First, if you don't have one already, create a `worlds` folder in `/opt/mscs/`.
|
|
|
|
2. Create a new folder **within the `/opt/mscs/worlds/` directory that is the name you want MSCS to use for the world**. For this example, I chose "vanillaMC". So for instance, I created a new directory `vanillaMC` within the `/opt/mscs/worlds` directory, so the path would be `/opt/mscs/worlds/vanillaMC`.
|
|
|
|
3. Drag the folder of the world you wish to move into the folder you just created. So I would drag the world `world` into the `vanillaMC` folder. The path of `world` (the actual world folder) would now be `/opt/mscs/worlds/vanillaMC/myWorld/`.
|
|
|
|
The finished file structure should be as follows with a world named `world` and a containing folder name "vanillaMC":
|
|
````
|
|
/opt/mscs/vanillaMC // The path
|
|
|
|
world // The actual world folder
|
|
server.properties
|
|
banned-ips.json
|
|
ops.json
|
|
eula.text
|
|
whitelist.json
|
|
and more files...
|
|
````
|
|
Again, the most important thing to note here is that your actual world folder is within a containing folder that is inside of the `worlds/` subdirectory. The name of the containing folder of `world` is the name which you will use within MSCS commands to manipulate that world--so in this case, when referring to the world above you will use the name `vanillaMC`, not the actual name of the world folder--`world`.
|
|
|
|
After you've set up the file structure, you now need to create a world entry into MSCS. Do this via:
|
|
|
|
mscs create [world] [port] <ip>
|
|
|
|
Where `world` is the **name of the containing folder you created** (so it would be "vanillaMC" from the previous example", and `port` is the server port (by default, use 25565).
|
|
`ip` is optional and will be used if you wish to create multiple worlds across different servers. For now, leave it blank.
|
|
|
|
Afterwards, simply start the server via `mscs start [world]` where `world` is the name of the containing world's folder (again, it would be "vanillaMC" from the last example).
|
|
|
|
**Finally, accept the EULA**.
|
|
As of Minecraft version 1.7.10, Mojang requires that users of their software read and agree to their [EULA](https://account.mojang.com/documents/minecraft_eula). After the first time you start the server, you need to modify the `eula.txt` file in your world's folder, changing the value of the `eula` variable from `false` to `true`.
|
|
The EULA can be found in `/opt/mscs/worlds/vanillaMC` where `vanillaMC` is the name you gave to to the world you imported.
|
|
|
|
After accepting the EULA simply start the server using the same command above, and you're all set!
|
|
|
|
## Adjusting server options
|
|
There are two ways of adjusting the options through MSCS: changing values in the mscs.properties file and/or editing the msctl file directly.
|
|
|
|
### The mscs.properties file
|
|
The `mscs.properties` file can be found in every world folder (for instance, if you had a world called `myWorld`, the path would be `/opt/mscs/worlds/myWorld/mscs.properties`).
|
|
|
|
By default, the file only has one line in it: `mscs-enabled=true`. You can add a variety of flags to this file and set them as to a true/false boolean or a variable to your liking.
|
|
|
|
The following flags are available:
|
|
* mscs-enabled - Enable or disable the world server.
|
|
* mscs-version-type - Assign the version type (release or snapshot).
|
|
* mscs-client-version - Assign the version of the client software.
|
|
* mscs-client-jar - Assign the .jar file for the client software.
|
|
* mscs-client-url - Assign the download URL for the client software.
|
|
* mscs-client-location - Assign the location of the client .jar file.
|
|
* mscs-server-version - Assign the version of the server software.
|
|
* mscs-server-jar - Assign the .jar file for the server software.
|
|
* mscs-server-url - Assign the download URL for the server software.
|
|
* mscs-server-args - Assign the arguments to the server.
|
|
* mscs-initial-memory - Assign the initial amount of memory for the server.
|
|
* mscs-maximum-memory - Assign the maximum amount of memory for the server.
|
|
* mscs-server-location - Assign the location of the server .jar file.
|
|
* mscs-server-command - Assign the command to run for the server.
|
|
|
|
The following variables may be used in some of the values of the above keys:
|
|
* $JAVA - The Java virtual machine.
|
|
* $CURRENT_VERSION - The current Mojang Minecraft release version.
|
|
* $CLIENT_VERSION - The version of the client software.
|
|
* $SERVER_VERSION - The version of the server software.
|
|
* $SERVER_JAR - The .jar file to run for the server.
|
|
* $SERVER_ARGS - The arguments to the server.
|
|
* $INITIAL_MEMORY - The initial amount of memory for the server.
|
|
* $MAXIMUM_MEMORY - The maximum amount of memory for the server.
|
|
* $SERVER_LOCATION - The location of the server .jar file.
|
|
|
|
#### Example key/value pairs
|
|
|
|
mscs-enabled=true
|
|
mscs-version-type=release
|
|
mscs-client-version=$CURRENT_VERSION
|
|
mscs-client-jar=$CLIENT_VERSION.jar
|
|
mscs-client-url=https://s3.amazonaws.com/Minecraft.Download/versions/$CLIENT_VERSION/$CLIENT_VERSION.jar
|
|
mscs-client-location=/opt/mscs/client/$CLIENT_VERSION
|
|
mscs-server-version=$CURRENT_VERSION
|
|
mscs-server-jar=minecraft_server.$SERVER_VERSION.jar
|
|
mscs-server-url=https://s3.amazonaws.com/Minecraft.Download/versions/$SERVER_VERSION/minecraft_server.$SERVER_VERSION.jar
|
|
mscs-server-args=nogui
|
|
mscs-initial-memory=128M
|
|
mscs-maximum-memory=2048M
|
|
mscs-server-location=/opt/mscs/server
|
|
mscs-server-command=$JAVA -Xms$INITIAL_MEMORY -Xmx$MAXIMUM_MEMORY -jar $SERVER_LOCATION/$SERVER_JAR $SERVER_ARGS
|
|
|
|
Run a Minecraft version 1.6.4 server:
|
|
|
|
mscs-client-version=1.6.4
|
|
mscs-server-version=1.6.4
|
|
|
|
Use Forge to run a 1.8.4 server (requires additional setup):
|
|
|
|
mscs-client-version=1.8.4
|
|
mscs-server-version=1.8.4
|
|
mscs-server-jar=forge-1.8-11.14.1.1419-universal.jar
|
|
mscs-server-url=http://files.minecraftforge.net/maven/net/minecraftforge/forge/1.8-11.14.1.1419/forge-1.8-11.14.1.1419-universal.jar
|
|
|
|
Use the latest BungeeCord successful build (requires additional setup):
|
|
|
|
mscs-server-jar=BungeeCord.jar
|
|
mscs-server-url=http://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/bootstrap/target/BungeeCord.jar
|
|
|
|
##### Additional documentation
|
|
|
|
More examples and documentation on server customization can be found on the [wiki](https://github.com/sandain/MinecraftServerControlScript/wiki/Server-Customization-Examples) page.
|
|
|
|
### The msctl file
|
|
The `msctl` file can be found at `/usr/local/bin`.
|
|
|
|
The `msctl` file is an additional file for adjusting the properties of your server that are not found in `mscs.properties`. Starting at line 236 and ending at line 385 is where the settings are in this file.
|
|
|
|
You can set the default settings of **mscs.properties** in this file, as well as some other useful settings:
|
|
* Line 305 is the beginning of the **server instance configuration** settings.
|
|
* Line 321 is the beginning of the **backup configuration** settings.
|
|
* Line 334 is the beginning of the **server log configuration** settings.
|
|
* Line 341 is the beginning of the **listing option** settings.
|
|
* Line 348 is the beginning of the **mirror image** settings.
|
|
* Line 370 is the beginning of the **minecraft overviewer** settings
|
|
|
|
## Scheduling Backups
|
|
|
|
## Command Reference
|
|
|
|
All commands below assume that you are running them as either the `minecraft`
|
|
user or as `root` (through sudo).
|
|
|
|
Note: If the script is run as the `root` user, all important server processes
|
|
will be started using the `minecraft` user instead for security purposes.
|
|
|
|
sudo mscs [option]
|
|
|
|
````
|
|
* start [world]
|
|
|
|
Start the Minecraft world server. Start all worlds by default.
|
|
|
|
* stop [world]
|
|
|
|
Stop the Minecraft world server. Stop all worlds by default.
|
|
|
|
* force-stop [world]
|
|
|
|
Forcibly stop the Minecraft world server. Forcibly stop all worlds by
|
|
default.
|
|
|
|
* restart [world]
|
|
|
|
Restart the Minecraft world server. Restart all worlds by default.
|
|
|
|
* force-restart [world]
|
|
|
|
Forcibly restart the Minecraft world server. Forcibly restart all
|
|
worlds by default.
|
|
|
|
* create [world] [port] [ip]
|
|
|
|
Create a Minecraft world server. The world name and port must be
|
|
provided, the IP address is usually blank.
|
|
|
|
* delete [world]
|
|
|
|
Delete a Minecraft world server.
|
|
|
|
* disable [world]
|
|
|
|
Temporarily disable a world server.
|
|
|
|
* enable [world]
|
|
|
|
Enable a disabled world server.
|
|
|
|
* list [option]
|
|
|
|
Display a list of worlds.
|
|
Options:
|
|
|
|
* enabled
|
|
|
|
Display a list of enabled worlds, default.
|
|
|
|
* disabled
|
|
|
|
Display a list of disabled worlds.
|
|
|
|
* running
|
|
|
|
Display a list of running worlds.
|
|
|
|
* stopped
|
|
|
|
Display a list of stopped worlds.
|
|
|
|
* status [world]
|
|
|
|
Display the status of the Minecraft world server. Display the
|
|
status of all worlds by default.
|
|
|
|
* broadcast [command]
|
|
|
|
Broadcast a command to all running Minecraft world servers.
|
|
|
|
* send [world] [command]
|
|
|
|
Send a command to a Minecraft world server.
|
|
|
|
* logrotate [world]
|
|
|
|
Rotate the server.log file. Rotate the server.log file for all
|
|
worlds by default.
|
|
|
|
* backup [world]
|
|
|
|
Backup the Minecraft world. Backup all worlds by default.
|
|
|
|
* list-backups [world]
|
|
|
|
List the datetime of the backups for the world.
|
|
|
|
* restore-backup [world] [datetime]
|
|
|
|
Restore a backup for a world that was taken at the datetime.
|
|
|
|
* console [world]
|
|
|
|
Connect to the Minecraft world server's console. Hit [Ctrl-D] to detach.
|
|
|
|
* watch [world]
|
|
|
|
Watch the log file for the Minecraft world server.
|
|
|
|
* map [world]
|
|
|
|
Run the Minecraft Overviewer mapping software on the Minecraft world.
|
|
Map all worlds by default.
|
|
|
|
* update
|
|
|
|
Update the client and server software packages.
|
|
````
|
|
|
|
### Examples
|
|
|
|
To start all of the world servers, issue the command:
|
|
|
|
sudo mscs start
|
|
|
|
To create a world named alpha, issue the command:
|
|
|
|
sudo mscs create alpha 25565
|
|
|
|
To start just the world named alpha, issue the command:
|
|
|
|
sudo mscs start alpha
|
|
|
|
To send a command to a world server, issue the command:
|
|
|
|
sudo mscs send [world] [command]
|
|
|
|
ie.
|
|
|
|
sudo mscs send alpha say Hello world!
|
|
|
|
|
|
## License
|
|
|
|
See [LICENSE](LICENSE)
|
|
|
|
## Issues
|
|
|
|
We have only tested this code in a Debian/Ubuntu environment, but there is no
|
|
reason that it shouldn't work in any appropriately configured UNIX-like
|
|
environment, including Apple Mac OSX and the other BSD variants, with only
|
|
minor modifications. If you experience errors running this script, please
|
|
post a copy of the error message and a note detailing the operating
|
|
environment where the error occurs to the support thread, and we will try to
|
|
work out a solution with you.
|
|
|
|
Support thread: http://www.minecraftforum.net/viewtopic.php?f=10&t=129833
|
|
|
|
Github Issues: https://github.com/sandain/MinecraftServerControlScript/issues
|