3 # Minecraft server script
5 # leander@one-button.org
7 # User editable variables:
8 # Always include the trailing slashes on directories!
9 MINECRAFT="minecraft_server.jar" # Name of your server jar file. This script supports vanilla and craftbukkit.
10 MCPATH="/var/minecraft_directory/" # Directory on disk of your MC server. Make sure your MINECRAFT jar file is located here.
11 SERVERNAME="minecraft"
12 ARGS="-Xmx2G -Xms2G -jar" # Standard arguments for the minecraft server jar.
13 USER="steve" # User your minecraft server runs under.
14 BACKUPDIR="/var/backup/minecaft_backup/" # Directory for backup tar files.
15 DAYSOFBACKUPS="+7" # number of days of backups to keep. Default is +7.
17 # Various programs this script calls
19 SCREEN="/usr/bin/screen"
20 DATE=$(date +%m-%d-%Y-%H:%M)
22 RSYNC="/usr/bin/rsync"
26 # Don't use this if you don't know what you're doing!
27 # See the README for me info
28 RAMDISK=false # Set to true if you want to use a RAM disk, false to run from a hard disk. See README first.
29 RAMDISKDIR="/lol/ramdisk/" # The path where your RAM disk is mounted.
33 if pgrep -u $USER -f $MINECRAFT > /dev/null
45 if [ "$WHOAMI" == "$USER" ]
60 echo "Minecraft already running ..."
62 if [ $RAMDISK == "true" ]
64 echo "Copying files to RAM Disk ..."
66 echo "Starting $MINECRAFT ..."
67 run_as "cd $RAMDISKDIR && $SCREEN -dm -S $SERVERNAME $JAVA $ARGS $MINECRAFT"
71 echo "Starting $MINECRAFT ..."
72 run_as "cd $MCPATH && $SCREEN -dm -S $SERVERNAME $JAVA $ARGS $MINECRAFT"
79 echo "$MINECRAFT started on $SERVERNAME screen session."
81 echo "Error, $MINECRAFT could not be started. Check ${MCPATH}logs/ for errors."
93 if [ $RAMDISK == "true" ]
96 echo "Syncing RAM drive to disk .."
101 echo "Stopping $MINECRAFT ... "
102 run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"say SERVER SHUT DOWN IN 5 SECONDS. SAVING WORLD ...\"$(echo -ne '\015')"
103 run_as "$SCREEN -p 0 -S $SERVERNAME -X eval 'stuff save-all\015'"
105 run_as "$SCREEN -p 0 -S $SERVERNAME -X eval 'stuff stop\015'"
110 echo "$MINECRAFT could not be stopped."
111 echo "Check ${MCPATH}server.log for errors."
113 echo "$MINECRAFT stopped."
117 echo "$MINECRAFT is not running"
126 echo "$MINECRAFT is running."
128 echo "$MINECRAFT is not running."
137 echo "Saving all in memory to disk ..."
138 run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"say SAVING WORLD. PREPARE FOR LAG.\"$(echo -ne '\015')"
139 run_as "$SCREEN -p 0 -S $SERVERNAME -X eval 'stuff save-all\015'"
141 run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"say SAVE COMPLETE.\"$(echo -ne '\015')"
143 echo "$MINECRAFT not running."
156 run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"whitelist add $2\"$(echo -ne '\015')"
158 elif [ "$1" == "remove" ]
160 run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"whitelist remove $2\"$(echo -ne '\015')"
164 echo "$MINECRAFT not running."
178 run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"ban $2\"$(echo -ne '\015')"
180 elif [ "$1" == "pardon" ]
182 run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"pardon $2\"$(echo -ne '\015')"
184 elif [ "$1" == "ban-ip" ]
186 run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"ban-ip $2\"$(echo -ne '\015')"
188 elif [ "$1" == "pardon-ip" ]
190 run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"pardon-ip $2\"$(echo -ne '\015')"
194 echo "$MINECRAFT not running."
205 if [ "$RAMDISK" == "true" ]
207 echo "Syncing RAM drive to disk .."
209 echo "Sync complete."
212 echo "Backing up server ..."
215 run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"say BACKING UP. SERVER GOING READ-ONLY.\"$(echo -ne '\015')"
216 run_as "$SCREEN -p 0 -S $SERVERNAME -X eval 'stuff save-off\015'"
217 run_as "$TAR czf ${BACKUPDIR}${SERVERNAME}-${DATE}.tar.gz $MCPATH"
218 run_as "$FIND ${BACKUPDIR} -maxdepth 1 -type f -mtime $DAYSOFBACKUPS -delete"
219 run_as "$SCREEN -p 0 -S $SERVERNAME -X eval 'stuff save-on\015'"
220 run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"say BACK UP COMPLETE. SERVER GOING READ-WRITE.\"$(echo -ne '\015')"
222 echo "Backup complete."
224 echo "Error, backup directory not found."
227 run_as "$TAR czf ${BACKUPDIR}minecraft-server-${DATE}.tar.gz $MCPATH"
228 echo "Backup complete."
229 echo "Cleaning up backups older than $DAYSOFBACKUPS days ..."
230 run_as "$FIND ${BACKUPDIR} -maxdepth 1 -type f -mtime $DAYSOFBACKUPS -delete"
231 echo "Old backups cleaned up"
237 echo "You are setup to run in a RAM disk."
238 echo "PLEASE see the README about syncing the RAM drive with a hard drive!"
239 run_as "$RSYNC -rO --delete-after $MCPATH $RAMDISKDIR"
244 if [ -f $RAMDISKDIR/${MINECRAFT} ]
247 echo "Syncing RAM disk to drive ..."
248 run_as "$SCREEN -p 0 -S $SERVERNAME -X eval 'stuff save-off\015'"
249 run_as "$SCREEN -p 0 -S $SERVERNAME -X eval 'stuff save-all\015'"
251 run_as "$RSYNC -art --delete-after $RAMDISKDIR $MCPATH"
252 run_as "$SCREEN -p 0 -S $SERVERNAME -X eval 'stuff save-on\015'"
253 echo "Sync complete."
256 echo "Error, $MINECRAFT not in RAM disk."
328 echo "Usage: minecraft-server {start|restart|save-all|backup|writetodisk|stop|whitelist-add|whitelist-remove|ban|ban-ip|pardon|pardon-ip}"