Last active
February 9, 2025 20:41
-
-
Save joelouisworthington/c7d8e1d3411bb4601a1449ce9b69c685 to your computer and use it in GitHub Desktop.
tmux Minecraft start, stop, restart, reload and backup script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
### BEGIN INIT INFO | |
# Provides: Minecraft-Server | |
# Required-Start: $all | |
# Required-Stop: $remote_fs $syslog $network | |
# Default-Start: 2 3 4 5 | |
# Default-Stop: 0 1 6 | |
# Short-Description: Starts minecraft server at boot time | |
# Description: Starts minecraft server at boot time | |
### END INIT INFO | |
#dir which contains the server directory | |
user=your_user | |
basedir=/home/$user/ | |
backup_path="/home/$user/backups/" | |
folder_name=$(date +%Y-%m-%d_%H-%M-%S) | |
world=world | |
#tmux session name (`basename \"$basedir\"` -> basedir's name) | |
session="`basename \"$basedir\"`" | |
if [[ basedir != */ ]] | |
then | |
basedir+="/" | |
fi | |
start() { | |
tmux new-session -d -s $session | |
echo "Starting server" | |
tmux send-keys -t $session:0 "cd $basedir" C-m | |
tmux send-keys -t $session:0 "bash startup.sh" C-m | |
echo "Server started. Attaching session..." | |
sleep 0.5 | |
tmux attach-session -t $session:0 | |
} | |
stop() { | |
tmux send-keys -t $session:0 "/say Server restarting in 5 minutes. Please get ready to log off." Enter | |
# Wait for 1770 seconds (29 minutes and 30 seconds) | |
# sleep 300s | |
sleep 10s | |
tmux send-keys -t $session:0 "stop" C-m | |
echo "Stopping server..." | |
for i in {5..1..-1} | |
do | |
echo -ne "\rWaiting for shutdown... $i" | |
sleep 1 | |
done | |
echo "" | |
echo "Killing tmux session" | |
tmux kill-session -t $session | |
echo "Server stopped" | |
} | |
backup() { | |
echo "Will start backup from $basedir to $backup_path/$folder_name..." | |
echo "Saving the game..." | |
tmux send-keys -t $session "/say Beep boop, backup starting..." Enter | |
tmux send-keys -t $session "save-off" Enter | |
tmux send-keys -t $session "save-all" Enter | |
sleep 30 | |
echo "Copying the files..." | |
tmux send-keys -t $session "/say Beep boop, save the world..." Enter | |
cp -r $basedir/$world/ $backup_path/$folder_name/ | |
echo "Removing the old backups..." | |
if [ $(ls $backup_path | wc -l) -gt 10 ] | |
then | |
echo "Remove 1 oldest backup..." | |
rm "$backup_path/$(ls $backup_path -t | tail -1)" -rf | |
fi | |
tmux send-keys -t $session "save-on" Enter | |
tmux send-keys -t $session "/say Beep boop, backup finished!" Enter | |
echo "Backup success!" | |
} | |
reload() { | |
tmux send-keys -t $session:0 "stop" C-m | |
echo "Stopping server..." | |
for i in {5..1..-1} | |
do | |
echo -ne "\rWaiting for shutdown... $i" | |
sleep 1 | |
done | |
echo "" | |
echo "Killing tmux session" | |
tmux kill-session -t $session | |
echo "Server stopped" | |
} | |
case "$1" in | |
start) | |
start | |
;; | |
stop) | |
stop | |
;; | |
attach) | |
tmux attach -t $session | |
;; | |
restart) | |
backup | |
sleep 10 | |
stop | |
sleep 0.8 | |
echo "Restarting server..." | |
sleep 0.8 | |
start | |
;; | |
reload) | |
stop | |
sleep 0.8 | |
echo "Reload server..." | |
sleep 0.8 | |
start | |
;; | |
*) | |
echo "Usage: start.sh (start|stop|backup|restart|reload|attach)" | |
;; | |
esac |
Hi @joelouisworthington I'm also using tmux to run my minecraft server and have something similar to yours with
tmux send-keys -t "$TMUX_SESSION" "say server is stopping in 5 secs immediately" C-m
sleep 5
tmux send-keys -t "$TMUX_SESSION" "stop" C-m
sleep 10
tmux kill-session -t "$TMUX_SESSION"
like you I also placed a sleep in between sending the stop command and killing the tmux session. I'm wondering if there's any issues with the possibility of killing the tmux session before the minecraft server stops fully
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks to @Jofkos and his script:
https://gist.github.com/Jofkos/86a4936c91999082d6a7