Configuration file /etc/default/minecraft
Variable | Description | Default value |
---|---|---|
MINECRAFT_USER_NAME | The user name to run Minecraft server | minecraft |
MINECRAFT_HOME | Home directory of Minecraft server instances | /home/minecraft |
MINECRAFT_START_COMMAND | Foreground server startup command | exec sh run.sh |
MINECRAFT_USE_TMUX | Enable to uses of tmux(1) | NO |
MINECRAFT_SESSION_NAME | Base session name of tmux(1) sessions | minecraft |
MINECRAFT_ALTERNATIVE_LOG_FILE | Redirect outputs to this file if tmux(1) is not used | /dev/null |
MINECRAFT_SERVERS | Space separated server instances |
Server instances are directories under MINECRAFT_HOME; each server instance will be started under its instance directory by running MINECRAFT_START_COMMAND. Enabling tmux(1) is recommended if using Bukkit server framework, as this server didn't save worlds when exiting on signals. Session name of each server instance will be ‘MINECRAFT_SESSION_NAME-INSTANCE_NAME’.
/etc/default/minecraft
example:
MINECRAFT_HOME=/export/home/minecraft MINECRAFT_SERVERS="1.7-server 1.8-server" MINECRAFT_USE_TMUX=YES
The user (minecraft
by default) must have a sh(1) compatible shell in order to run shell commands with the default shell.
The startup script (run.sh
by default) must write the PID of server program to server.pid
, and must not fork the server program into background.
run.sh
example:
#!/bin/sh JAVA_HOME=/opt/jdk1.7.0_80 echo $$ > server.pid exec "$JAVA_HOME/bin/java" -jar /opt/minecraft/minecraft-server-1.7.10.jar --nogui
This is very similar to init.d/minecraft
, except the configuration variables are in lower case and set from rc.conf
instead of /etc/default/minecraft
Example configuration in rc.conf
:
minecraft_enable="YES" minecraft_home="/usr/home/minecraft" minecraft_use_tmux="YES" minecraft_servers="1.7-server 1.8-server"
The user and startup script requirements are same with init.d/minecraft
.
minecraft_use_tmux="YES"
svccfg(1M) should be used instead of editing configuration file; configuration properties and its default values are:
$ svccfg -s site/minecraft listprop config config application config/alt_log_file astring /dev/null config/session_name astring minecraft config/start_command astring "exec sh run.sh" config/use_tmux boolean false config/user astring minecraft config/home astring /var/games/minecraft config/servers astring
Example configuration:
# svccfg -s site/minecraft setprop config/home = astring: /export/home/minecraft # svccfg -s site/minecraft setprop config/use_tmux = boolean: true # svccfg -s site/minecraft setprop config/servers = astring: '("1.7-server" "1.8-server")' # svcadm enable site/minecraft
Due to some limitations of systemd, many configuration variables used in previous scripts are hardcoded; service user will always be minecraft
; home directory is the home directory of user minecraft
; start up script is run.sh
under instance directory. Two types of services are available: minecraft@.service
and minecraft-tmux@.service
; use only one type per instance. Like init.d/minecraft
, instances are directories under home directory. Referencing an instance in systemd with minecraft@<instance-name>.service
or minecraft-tmux@<instance-name>.service
. To configure multiple server instances, just enable every instance via systemctl(1). Unlike other service scripts, writing PID of server program to server.pid
is not required in run.sh
, for use with these systemd units.
Example configuration:
# systemctl enable --now minecraft-tmux@1.6-server minecraft@1.7-server minecraft@1.8-server
By default the Bukkit-based servers will ignore EOF from stdin, resulting in busy loop if stdin is redirected to /dev/null
. The recommended solution is to use tmux(1) with it; however there is also an option --noconsole
available, to disable reading from stdin in Bukkit server. For example the run.sh
could be written as:
#!/bin/sh JAVA_HOME=/opt/jdk1.7.0_80 echo $$ > server.pid tty -s && options= || options="--noconsole --nojline" exec "$JAVA_HOME/bin/java" -jar /opt/minecraft/craftbukkit-1.2.5-R5.0.jar $options "$@"
This script work with or without tmux(1). Option --nojline
disables the line editing library jline, since it would be useless after stdin redirected to /dev/null
.