Moved from github, lost history. Starting over.
This commit is contained in:
Executable
+333
@@ -0,0 +1,333 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Minecraft server script
|
||||
# v0.3
|
||||
# leander@one-button.org
|
||||
|
||||
# User editable variables:
|
||||
# Always include the trailing slashes on directories!
|
||||
MINECRAFT="minecraft_server.jar" # Name of your server jar file. This script supports vanilla and craftbukkit.
|
||||
MCPATH="/var/minecraft_directory/" # Directory on disk of your MC server. Make sure your MINECRAFT jar file is located here.
|
||||
SERVERNAME="minecraft"
|
||||
ARGS="-Xmx2G -Xms2G -jar" # Standard arguments for the minecraft server jar.
|
||||
USER="steve" # User your minecraft server runs under.
|
||||
BACKUPDIR="/var/backup/minecaft_backup/" # Directory for backup tar files.
|
||||
DAYSOFBACKUPS="+7" # number of days of backups to keep. Default is +7.
|
||||
|
||||
# Various programs this script calls
|
||||
JAVA="/usr/bin/java"
|
||||
SCREEN="/usr/bin/screen"
|
||||
DATE=$(date +%m-%d-%Y-%H:%M)
|
||||
TAR="/bin/tar"
|
||||
RSYNC="/usr/bin/rsync"
|
||||
FIND="/usr/bin/find"
|
||||
|
||||
# RAM Disk settings.
|
||||
# Don't use this if you don't know what you're doing!
|
||||
# See the README for me info
|
||||
RAMDISK=false # Set to true if you want to use a RAM disk, false to run from a hard disk. See README first.
|
||||
RAMDISKDIR="/lol/ramdisk/" # The path where your RAM disk is mounted.
|
||||
|
||||
already_running(){
|
||||
|
||||
if pgrep -u $USER -f $MINECRAFT > /dev/null
|
||||
then
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
run_as() {
|
||||
|
||||
WHOAMI=$(whoami)
|
||||
|
||||
if [ "$WHOAMI" == "$USER" ]
|
||||
then
|
||||
bash -c "$1"
|
||||
else
|
||||
su - $USER -c "$1"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
start() {
|
||||
|
||||
already_running
|
||||
|
||||
if [ "$?" == "1" ]
|
||||
then
|
||||
echo "Minecraft already running ..."
|
||||
else
|
||||
if [ $RAMDISK == "true" ]
|
||||
then
|
||||
echo "Copying files to RAM Disk ..."
|
||||
setup_ramdisk
|
||||
echo "Starting $MINECRAFT ..."
|
||||
run_as "cd $RAMDISKDIR && $SCREEN -dm -S $SERVERNAME $JAVA $ARGS $MINECRAFT"
|
||||
sleep 7
|
||||
else
|
||||
|
||||
echo "Starting $MINECRAFT ..."
|
||||
run_as "cd $MCPATH && $SCREEN -dm -S $SERVERNAME $JAVA $ARGS $MINECRAFT"
|
||||
sleep 7
|
||||
fi
|
||||
|
||||
already_running
|
||||
if [ "$?" == "1" ]
|
||||
then
|
||||
echo "$MINECRAFT started on $SERVERNAME screen session."
|
||||
else
|
||||
echo "Error, $MINECRAFT could not be started. Check ${MCPATH}logs/ for errors."
|
||||
fi
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
stop() {
|
||||
|
||||
already_running
|
||||
if [ "$?" == "1" ]
|
||||
then
|
||||
if [ $RAMDISK == "true" ]
|
||||
then
|
||||
|
||||
echo "Syncing RAM drive to disk .."
|
||||
sync_ram_to_disk
|
||||
echo "Sync complete."
|
||||
|
||||
fi
|
||||
echo "Stopping $MINECRAFT ... "
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"say SERVER SHUT DOWN IN 5 SECONDS. SAVING WORLD ...\"$(echo -ne '\015')"
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X eval 'stuff save-all\015'"
|
||||
sleep 5
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X eval 'stuff stop\015'"
|
||||
sleep 2
|
||||
already_running
|
||||
if [ "$?" == "1" ]
|
||||
then
|
||||
echo "$MINECRAFT could not be stopped."
|
||||
echo "Check ${MCPATH}server.log for errors."
|
||||
else
|
||||
echo "$MINECRAFT stopped."
|
||||
fi
|
||||
|
||||
else
|
||||
echo "$MINECRAFT is not running"
|
||||
fi
|
||||
}
|
||||
|
||||
status() {
|
||||
|
||||
already_running
|
||||
if [ "$?" == "1" ]
|
||||
then
|
||||
echo "$MINECRAFT is running."
|
||||
else
|
||||
echo "$MINECRAFT is not running."
|
||||
fi
|
||||
}
|
||||
|
||||
save_all() {
|
||||
|
||||
already_running
|
||||
if [ "$?" == "1" ]
|
||||
then
|
||||
echo "Saving all in memory to disk ..."
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"say SAVING WORLD. PREPARE FOR LAG.\"$(echo -ne '\015')"
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X eval 'stuff save-all\015'"
|
||||
sleep 10
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"say SAVE COMPLETE.\"$(echo -ne '\015')"
|
||||
else
|
||||
echo "$MINECRAFT not running."
|
||||
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
whitelist() {
|
||||
|
||||
already_running
|
||||
if [ "$?" == "1" ]
|
||||
then
|
||||
if [ "$1" == "add" ]
|
||||
then
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"whitelist add $2\"$(echo -ne '\015')"
|
||||
|
||||
elif [ "$1" == "remove" ]
|
||||
then
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"whitelist remove $2\"$(echo -ne '\015')"
|
||||
fi
|
||||
|
||||
else
|
||||
echo "$MINECRAFT not running."
|
||||
|
||||
fi
|
||||
|
||||
|
||||
}
|
||||
|
||||
ban() {
|
||||
|
||||
already_running
|
||||
if [ "$?" == "1" ]
|
||||
then
|
||||
if [ "$1" == "ban" ]
|
||||
then
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"ban $2\"$(echo -ne '\015')"
|
||||
|
||||
elif [ "$1" == "pardon" ]
|
||||
then
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"pardon $2\"$(echo -ne '\015')"
|
||||
|
||||
elif [ "$1" == "ban-ip" ]
|
||||
then
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"ban-ip $2\"$(echo -ne '\015')"
|
||||
|
||||
elif [ "$1" == "pardon-ip" ]
|
||||
then
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"pardon-ip $2\"$(echo -ne '\015')"
|
||||
fi
|
||||
|
||||
else
|
||||
echo "$MINECRAFT not running."
|
||||
|
||||
fi
|
||||
|
||||
|
||||
}
|
||||
|
||||
backup() {
|
||||
already_running
|
||||
if [ "$?" == "1" ]
|
||||
then
|
||||
if [ "$RAMDISK" == "true" ]
|
||||
then
|
||||
echo "Syncing RAM drive to disk .."
|
||||
sync_ram_to_disk
|
||||
echo "Sync complete."
|
||||
fi
|
||||
|
||||
echo "Backing up server ..."
|
||||
if [ -d $BACKUPDIR ]
|
||||
then
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"say BACKING UP. SERVER GOING READ-ONLY.\"$(echo -ne '\015')"
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X eval 'stuff save-off\015'"
|
||||
run_as "$TAR czf ${BACKUPDIR}${SERVERNAME}-${DATE}.tar.gz $MCPATH"
|
||||
run_as "$FIND ${BACKUPDIR} -maxdepth 1 -type f -mtime $DAYSOFBACKUPS -delete"
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X eval 'stuff save-on\015'"
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X stuff \"say BACK UP COMPLETE. SERVER GOING READ-WRITE.\"$(echo -ne '\015')"
|
||||
|
||||
echo "Backup complete."
|
||||
else
|
||||
echo "Error, backup directory not found."
|
||||
fi
|
||||
else
|
||||
run_as "$TAR czf ${BACKUPDIR}minecraft-server-${DATE}.tar.gz $MCPATH"
|
||||
echo "Backup complete."
|
||||
echo "Cleaning up backups older than $DAYSOFBACKUPS days ..."
|
||||
run_as "$FIND ${BACKUPDIR} -maxdepth 1 -type f -mtime $DAYSOFBACKUPS -delete"
|
||||
echo "Old backups cleaned up"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
setup_ramdisk() {
|
||||
echo "You are setup to run in a RAM disk."
|
||||
echo "PLEASE see the README about syncing the RAM drive with a hard drive!"
|
||||
run_as "$RSYNC -rO --delete-after $MCPATH $RAMDISKDIR"
|
||||
}
|
||||
|
||||
sync_ram_to_disk() {
|
||||
|
||||
if [ -f $RAMDISKDIR/${MINECRAFT} ]
|
||||
then
|
||||
|
||||
echo "Syncing RAM disk to drive ..."
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X eval 'stuff save-off\015'"
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X eval 'stuff save-all\015'"
|
||||
sleep 2
|
||||
run_as "$RSYNC -art --delete-after $RAMDISKDIR $MCPATH"
|
||||
run_as "$SCREEN -p 0 -S $SERVERNAME -X eval 'stuff save-on\015'"
|
||||
echo "Sync complete."
|
||||
|
||||
else
|
||||
echo "Error, $MINECRAFT not in RAM disk."
|
||||
fi
|
||||
}
|
||||
|
||||
case $1 in
|
||||
start)
|
||||
start
|
||||
exit 1
|
||||
;;
|
||||
stop)
|
||||
stop
|
||||
exit 1
|
||||
;;
|
||||
|
||||
save-all)
|
||||
save_all
|
||||
exit 1
|
||||
;;
|
||||
|
||||
backup)
|
||||
save_all
|
||||
backup
|
||||
exit 1
|
||||
;;
|
||||
|
||||
whitelist-add)
|
||||
whitelist add $2
|
||||
exit 1
|
||||
;;
|
||||
|
||||
whitelist-remove)
|
||||
whitelist remove $2
|
||||
exit 1
|
||||
;;
|
||||
|
||||
ban)
|
||||
ban ban $2
|
||||
exit 1
|
||||
;;
|
||||
|
||||
ban-ip)
|
||||
ban ban-ip $2
|
||||
exit 1
|
||||
;;
|
||||
|
||||
pardon)
|
||||
ban pardon $2
|
||||
exit 1
|
||||
;;
|
||||
|
||||
pardon-ip)
|
||||
ban pardon-ip $2
|
||||
exit 1
|
||||
;;
|
||||
|
||||
status)
|
||||
status
|
||||
exit 1
|
||||
;;
|
||||
|
||||
writetodisk)
|
||||
sync_ram_to_disk
|
||||
exit 1
|
||||
;;
|
||||
|
||||
restart)
|
||||
stop
|
||||
start
|
||||
exit 1
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: minecraft-server {start|restart|save-all|backup|writetodisk|stop|whitelist-add|whitelist-remove|ban|ban-ip|pardon|pardon-ip}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user