Tutorials/FreeBSD startup script

This is an example of a possible Minecraft server rc.d startup script for FreeBSD.
== Installation ==
* Use adduser to create a new user named minecraft. When asked to select the new user's home directory, use /srv/minecraft.
* Ensure that your /srv filesystem has enough free space (around ~100-200MB depending on your needs) - df -h will show how much space is available.
* Install Java if necessary. The port is available at /usr/ports/java/openjdk8.
* As root, run the following:
# cd /usr/ports/sysutils/screen && make install clean
# cd /srv/minecraft
# fetch https://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar
# chown minecraft:minecraft *
# fetch -o /usr/local/etc/rc.d/minecraft http://vidya.dyndns.org/stuff/minecraft
# chmod 0555 /usr/local/etc/rc.d/minecraft
* If you have existing server configuration files, world files, etc., copy them into /srv/minecraft and give ownership to your minecraft user.
* Edit /etc/rc.conf.local (create if it doesn't exist) and add the following line:
minecraft_enable="yes"
* The server should now start on boot. To launch, check status, and shut down, use the following commands:
# /usr/local/etc/rc.d/minecraft start
# /usr/local/etc/rc.d/minecraft status
# /usr/local/etc/rc.d/minecraft stop
Or:
# service minecraft start
# service minecraft status
# service minecraft stop
=== Script ===
#!/bin/sh
#
# PROVIDE: minecraft
# REQUIRE: LOGIN DAEMON NETWORKING mountcritlocal
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf.local to enable the minecraft server:
#
# minecraft_enable="YES"
# minecraft_user="<run server as this user>"
# minecraft_chdir="<run server in this directory>"
# minecraft_path="<path to minecraft_server.jar>"
# minecraft_flags="<set as needed>"
#
# For default setup, create a user named 'minecraft', set its home directory
# to /srv/minecraft, and place minecraft_server.jar into /srv/minecraft
#
# See minecraft_server.jar for flags
. /etc/rc.subr
name=minecraft
rcvar=minecraft_enable
load_rc_config ${name}
command=/usr/local/bin/screen
pidfile=/var/run/minecraft.pid
start_cmd="${name}_start"
stop_cmd="${name}_stop"
status_cmd="${name}_status"
: ${minecraft_enable="NO"}
: ${minecraft_session="minecraft-session"}
: ${minecraft_user="minecraft"}
: ${minecraft_chdir="/srv/minecraft"}
: ${minecraft_path="/srv/minecraft/minecraft_server.jar"}
: ${minecraft_flags="--nogui"}
: ${minecraft_args="/usr/local/bin/java -Xmx1024M -Xms1024M \
 -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing \
 -XX:ParallelGCThreads=4 -XX:+AggressiveOpts \
 -jar ${minecraft_path} ${minecraft_flags}"}
minecraft_start() {
 unset "${rc_arg}_cmd"
 minecraft_flags="-d -m -S ${minecraft_session} ${minecraft_args}"
 if minecraft_running; then
 echo "minecraft already running?"
 else
 run_rc_command "start"
 fi
}
minecraft_stop() {
 local cmd
 cmd="${command} -p 0 -S ${minecraft_session} -X eval 'stuff stop\015'"
 if minecraft_running; then
 echo "Stopping minecraft."
 su -m ${minecraft_user} -c "${cmd}"
 fi
}
minecraft_status() {
 if minecraft_running; then
 echo "minecraft is running."
 else
 echo "minecraft is not running."
 fi
}
minecraft_running() {
 local check ses
 ses="${minecraft_session}"
 check=`su -m ${minecraft_user} -c "${command} -list" | grep ${ses}`
 if [ "$check" ]; then
 return 0
 else
 return 1
 fi
}
run_rc_command "$1"
Category:Server
zh:教程/FreeBSD启动脚本