Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # chkconfig: 2345 20 80
- # description: A basic minecraft startup script created by Piffey \
- # and modified by Robert Pendell to support users.
- # Simple bukkit startup script by Piffey
- # This is by no means a clean script, but it will get the job done.
- # Suggestions? Improvements? Let me know at Piffey.com
- # All of the screen stuff was adapted from ragon's <frederik.engels24 AT gmail DOT com> script for his Arch Linux package.
- # Reason: I don't use screen, but it's likely the best option for anyone looking for a simple script they can run and ignore.
- # His script worked perfect for my first server too. Thanks ragon.
- # Some modifications by Robert Pendell
- # * Added sudo string and set user to run server as (security)
- # * Added save state option (for crons)
- # * Added friendly restart option (for crons)
- # * Modified backups to be more verbose in console and game
- # * Modified backup function to create backup dir if it doesn't exist
- # * Added more string variables
- # Set these values to match your server's settings.
- backupdir=/minecraft/backups/
- bukkitdir=/minecraft/
- bukkitfilename=craftbukkit.jar
- bukkitupdate=craftbukkit-updater.jar
- username=minecraft
- backupmsg="Starting multiworld backup..."
- backupdone="Multiworld backup completed!"
- backupworldmsg="Backing up world"
- readonlymsg="Server is now in Read-Only Mode."
- readwritemsg="Server now in Read-Write Mode."
- savestatemsg="Saving state..."
- dateformat=$(date '+%Y%m%dh%Hm%M')
- # Make sure you change this to the name of your world folder! Add additional worlds by separating them with a white space. If you only have one world, change
- # this to have only one value like "world" or "creative".
- declare -a worlds=(world world_nether skyrealm creative)
- numworlds=${#worlds[@]}
- # Set these for the amount of RAM you want to allocate. Good practice is to have the numbers match.
- # This is the Java heap max and initial size.
- # The second line is an attempt at agressive garbage collection
- javaparams="-client -Xmx1024M"
- #javaparams="-server -Xmx1024M -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=2 -XX:+AggressiveOpts"
- # You can find this location with "whereis java". Make sure this points to the binary.
- javaloc=/usr/bin/java
- # This currently points to the "preferred" release for bukkit which is kind of like a stable version.
- # Change this value if you want to use the snapshot release.
- bukkiturl=http://ci.bukkit.org/job/dev-CraftBukkit/promotion/latest/Recommended/artifact/target/craftbukkit-0.0.1-SNAPSHOT.jar
- startbukkit()
- {
- if [ "$(screen -ls | grep bukkit)" == "" ] ; then
- cd $bukkitdir
- screen -S bukkit -dmS sudo -u $username $javaloc $javaparams -jar $bukkitdir$bukkitfilename nogui
- echo $!
- echo "Starting bukkit server."
- else
- echo "Bukkit is already running."
- exit 0
- fi
- }
- stopbukkit()
- {
- if [ "$(screen -ls | grep bukkit)" == "" ] ; then
- echo "Bukkit is not running."
- exit 0
- else
- screen -S bukkit -p 0 -X stuff "stop$(echo -ne '\r')"
- sleep 5
- fi
- }
- updatebukkit()
- {
- if [ "$(screen -ls | grep bukkit)" == "" ] ; then
- sleep 0
- else
- screen -S bukkit -p 0 -X stuff "say Going down for an update in 60 seconds.$(echo -ne '\r')"
- sleep 55
- screen -S bukkit -p 0 -X stuff "say Going down for an update in 5 seconds.$(echo -ne '\r')"
- sleep 5
- stopbukkit
- fi
- wget -O $bukkitdir$bukkitupdate $bukkiturl
- sleep 5
- mv $bukkitdir$bukkitupdate $bukkitdir$bukkitfilename
- sleep 5
- }
- backupbukkit()
- {
- echo "Starting multiworld backup..."
- if [ "$(screen -ls | grep bukkit)" == "" ] ; then
- sleep 0
- else
- screen -S bukkit -p 0 -X stuff "say $backupmsg $(echo -ne '\r')"
- screen -S bukkit -p 0 -X stuff "save-all$(echo -ne '\r')"
- sleep 5
- screen -S bukkit -p 0 -X stuff "save-off$(echo -ne '\r')"
- screen -S bukkit -p 0 -X stuff "say $readonlymsg $(echo -ne '\r')"
- fi
- if [ -d $backupdir ] ; then
- sleep 0
- else
- mkdir -p $backupdir
- fi
- mkdir $backupdir$dateformat
- for ((i=0;i<$numworlds;i++)); do
- screen -S bukkit -p 0 -X stuff "say $backupworldmsg ${worlds[$i]}. $(echo -ne '\r')"
- cp -R $bukkitdir${worlds[$i]} $backupdir$dateformat
- echo "Saving '${worlds[$i]}' to '$backupdir$dateformat'"
- done
- if [ "$(screen -ls | grep bukkit)" == "" ] ; then
- sleep 0
- else
- sleep 5
- screen -S bukkit -p 0 -X stuff "save-on$(echo -ne '\r')"
- screen -S bukkit -p 0 -X stuff "say $readwritemsg $(echo -ne '\r')"
- screen -S bukkit -p 0 -X stuff "say $backupdone $(echo -ne '\r')"
- fi
- echo "Backup complete."
- }
- savestatebukkit()
- {
- if [ "$(screen -ls | grep bukkit)" == "" ] ; then
- sleep 0
- else
- screen -S bukkit -p 0 -X stuff "say $savestatemsg $(echo -ne '\r')"
- screen -S bukkit -p 0 -X stuff "save-all$(echo -ne '\r')"
- fi
- }
- case $1 in
- start)
- startbukkit
- ;;
- stop)
- stopbukkit
- ;;
- restart)
- stopbukkit
- sleep 5
- startbukkit
- ;;
- update)
- updatebukkit
- ;;
- backup)
- backupbukkit
- ;;
- savestate)
- savestatebukkit
- ;;
- friendlyrestart)
- if [ "$(screen -ls | grep bukkit)" == "" ] ; then
- sleep 0
- else
- screen -S bukkit -p 0 -X stuff "say Restarting in 60 seconds.$(echo -ne '\r')"
- sleep 55
- screen -S bukkit -p 0 -X stuff "say Restarting in 5 seconds.$(echo -ne '\r')"
- sleep 5
- stopbukkit
- sleep 5
- startbukkit
- fi
- ;;
- friendlystop)
- screen -S bukkit -p 0 -X stuff "say Going down in 5 minutes.$(echo -ne '\r')"
- sleep 240
- screen -S bukkit -p 0 -X stuff "say Going down in 60 seconds.$(echo -ne '\r')"
- sleep 55
- screen -S bukkit -p 0 -X stuff "say Going down in 5 seconds.$(echo -ne '\r')"
- sleep 5
- stopbukkit
- ;;
- *)
- echo "Usage: $0 {start|stop|restart|update|backup|savestate|friendlyrestart|friendlystop}"
- esac
- exit 0
Advertisement
Add Comment
Please, Sign In to add comment