This service depends on daemon
package.
Download Minecraft server from official web site and extract it into /usr/local/share/minecraft
directory.
Create minecraft.daemon
containing:
Shell
#! /bin/bash | |
### BEGIN INIT INFO | |
# Provides: minecraft | |
# Required-Start: $remote_fs $syslog | |
# Required-Stop: $remote_fs $syslog | |
# Should-Start: $network | |
# Should-Stop: $network | |
# Default-Start: 2 3 4 5 | |
# Default-Stop: 0 1 6 | |
# Short-Description: minecraft initscript | |
# Description: Script to start and stop minecraft server. | |
### END INIT INFO | |
| |
# Author: Laurent Mazet | |
| |
# Do NOT "set -e" | |
| |
# PATH should only include /usr/* if it runs after the mountnfs.sh script | |
PATH=/sbin:/usr/sbin:/bin:/usr/bin | |
DESC="Minecraft server" | |
NAME=minecraft | |
USER=minecraft | |
CACHE=/var/cache/minecraft | |
DAEMON=/usr/local/share/minecraft/server.jar | |
MEMORY_MIN=1024M | |
MEMORY_MAX=1024M | |
DAEMON_ARGS="-Xms$MEMORY_MIN -Xmx$MEMORY_MAX" | |
PIDFILE=/var/run/$NAME/pid | |
LOGFILE=/var/log/$NAME.log | |
SCRIPTNAME=/etc/init.d/$NAME | |
| |
# Exit if the package is not installed | |
[ -f "$DAEMON" ] || exit 0 | |
| |
# Read configuration variable file if it is present | |
[ -r /etc/default/$NAME ] && . /etc/default/$NAME | |
| |
# Load the VERBOSE setting and other rcS variables | |
. /lib/init/vars.sh | |
| |
# Define LSB log_* functions. | |
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. | |
. /lib/lsb/init-functions | |
| |
# Do not start daemon if not wanted | |
[ "$SERVICE" = "no" -o "$SERVICE" = "NO" ] && exit 0 | |
| |
# | |
# Function that starts the daemon/service | |
# | |
do_start() | |
{ | |
[ -d $CACHE ] || mkdir $CACHE | |
chown -R $USER $CACHE | |
| |
# Init log files | |
if [ "$LOGFILE" ]; then | |
touch $LOGFILE | |
chown $USER $LOGFILE | |
DAEMON_LOGS="-l $LOGFILE -b $LOGFILE -o $LOGFILE" | |
fi | |
[ -d /var/log/$NAME ] || mkdir /var/log/$NAME | |
chown -R $USER /var/log/$NAME | |
| |
# Link own config files | |
for f in $DAEMON /etc/$NAME/*; do | |
[ -f $CACHE/$(basename $f) ] || ln -sf $f $CACHE | |
done | |
[ -e $CACHE/logs ] || ln -sf /var/log/$NAME $CACHE/logs | |
| |
export CLASSPATH=. | |
| |
PIDDIR=$(dirname $PIDFILE) | |
[ -d $PIDDIR ] || mkdir -p $PIDDIR | |
chown $USER $PIDDIR | |
| |
daemon --chdir $CACHE --name $NAME --pidfile $PIDFILE --user $USER \ | |
$DAEMON_LOGS \ | |
--respawn --acceptable 10 --attempts 2 --delay 30 -- \ | |
java $DAEMON_ARGS -jar $(basename $DAEMON) nogui | |
} | |
| |
# | |
# Function that stops the daemon/service | |
# | |
do_stop() | |
{ | |
daemon --stop --name $NAME --pidfile $PIDFILE | |
sleep 1 | |
PIDS=$(ps -u corlocmh -o pid=) | |
[ "$PIDS" ] && eval kill -SIGTERM $PIDS | |
} | |
| |
case "$1" in | |
start) | |
| |
[ "$VERBOSE" != yes ] && log_daemon_msg "Starting $DESC" "$NAME" | |
do_start | |
case "$?" in | |
0|1) [ "$VERBOSE" != yes ] && log_end_msg 0; RETVAL=0;; | |
2) [ "$VERBOSE" != yes ] && log_end_msg 1; RETVAL=1;; | |
esac | |
;; | |
stop) | |
do_stop | |
[ "$VERBOSE" != yes ] && log_daemon_msg "Stopping $DESC" "$NAME" | |
case "$?" in | |
0|1) [ "$VERBOSE" != yes ] && log_end_msg 0; RETVAL=0;; | |
2) [ "$VERBOSE" != yes ] && log_end_msg 1; RETVAL=1;; | |
esac | |
;; | |
status) | |
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? | |
;; | |
restart|force-reload) | |
# | |
# If the "reload" option is implemented then remove the | |
# 'force-reload' alias | |
# | |
| |
log_daemon_msg "Restarting $DESC" "$NAME" | |
do_stop | |
case "$?" in | |
0|1) | |
do_start | |
case "$?" in | |
0) log_end_msg 0; RETVAL=0;; | |
1) log_end_msg 1; RETVAL=1;; # Old process is still runn | |
*) log_end_msg 1; RETVAL=1;; # Failed to start | |
esac | |
;; | |
*) | |
# Failed to stop | |
log_end_msg 1; RETVAL=1;; | |
esac | |
;; | |
*) | |
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 | |
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 | |
exit 3 | |
;; | |
esac | |
| |
exit $RETVAL |
Execute post-install script:
Shell
#!/bin/sh | |
| |
set -e | |
| |
USER=minecraft | |
| |
# Create /etc files | |
| |
mkdir /etc/minecraft | |
| |
java -Xmx128M -Xms128M -jar server.jar nogui | |
| |
mv eula.txt server.properties /etc/minecraft | |
sed -i s/false/true/ eula.txt | |
rm -rf logs | |
| |
# Copy service files | |
cp minecraft.daemon /etc/init.d/minecraft | |
echo "SERVICE=yes" > /etc/default/minecraft | |
| |
# Add user | |
if ! getent passwd | grep -q "^$USER:"; then | |
echo "Adding $USER user..." | |
adduser --system --group --no-create-home --home /var/cache/minecraft --shell /bin/sh --quiet $USER || true | |
fi | |
| |
# Start service | |
if [ -x "/etc/init.d/minecraft" ]; then | |
update-rc.d minecraft defaults >/dev/null | |
service minecraft start || exit $? | |
fi | |
| |
exit 0 |