ich wollte einen autostart bzw autostop über die Debian Runlevels einrichten hierfür habe ich eine datei im init.d ordner angelegt welche wie folgt aussieht:
Code: Alles auswählen
#!/bin/bash
### BEGIN INIT INFO
# Provides: arvlmc
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Arvlmc start/stop
### END INIT INFO
BINDIR=$(dirname "$(readlink -fn "$0")")
cd "$BINDIR"
APPLICATION_NAME="Arvl Minecraft Server"
SCREEN_NAME="arvlmc"
EXECUTION_FILE="java -Xmx4096M -Xms4096M -XX:ParallelGCThreads=4 -jar craftbukkit-1.13.1.jar nogui"
EXECUTING_USER="arvl"
BINDIR=$(dirname "$(readlink -fn "$0")")
cd "$BINDIR"
case "$1" in
start)
if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
echo -e "Der ${APPLICATION_NAME} läuft bereits!";
else
echo -e "Der ${APPLICATION_NAME} wird gestartet..."
sudo -u ${EXECUTING_USER} screen -AdmS ${SCREEN_NAME} ${EXECUTION_FILE} &
PID=$!
ps -p ${PID} > /dev/null 2>&1
if [ "$?" -ne "0" ]; then
echo -e "Fehler beim starten von dem ${APPLICATION_NAME}!"
fi;
fi
elif whoami | grep -q "${EXECUTING_USER}"; then
if screen -list | grep -q ${SCREEN_NAME}; then
echo -e "Der ${APPLICATION_NAME} läuft bereits!"
else
echo -e "Der ${APPLICATION_NAME} wird gestartet..."
screen -admS ${SCREEN_NAME} ${EXECUTION_FILE} &
PID=$!
ps -p ${PID} > /dev/null 2>&1
if [ "$?" -ne "0" ]; then
echo -e "Fehler beim starten von dem ${APPLICATION_NAME}!"
fi;
fi
else
echo -e "$Du hast keine Berechtigung den ${APPLICATION_NAME} zu starten!"
fi
;;
stop)
if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
echo -e "Der ${APPLICATION_NAME} wird gestoppt! Bitte warte einige Sekunden..."
sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "save-all^M"
sleep 3
sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say Server wird gestoppt in...^M"
sleep 1
sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 3^M"
sleep 1
sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 2^M"
sleep 1
sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 1^M"
sleep 0.5
sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "stop^M"
else
echo -e "$Der ${APPLICATION_NAME} läuft nicht!"
fi
elif whoami | grep -q "${EXECUTING_USER}"; then
if screen -list | grep -q ${SCREEN_NAME}; then
echo -e "Der ${APPLICATION_NAME} wird gestoppt! Bitte warte einige Sekunden..."
screen -S ${SCREEN_NAME} -X stuff "save-all^M"
sleep 3
screen -S ${SCREEN_NAME} -X stuff "say Server wird gestoppt in...^M"
sleep 1
screen -S ${SCREEN_NAME} -X stuff "say 3^M"
sleep 1
screen -S ${SCREEN_NAME} -X stuff "say 2^M"
sleep 1
screen -S ${SCREEN_NAME} -X stuff "say 1^M"
sleep 0.5
screen -S ${SCREEN_NAME} -X stuff "stop^M"
else
echo -e "Der ${APPLICATION_NAME} läuft nicht!"
fi
else
echo -e "Du hast keine Berechtigung den ${APPLICATION_NAME} zu stoppen!"
fi
;;
restart)
if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
echo -e "Der ${APPLICATION_NAME} wird neugestartet! Bitte warte einige Sekunden..."
sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "save-all^M"
sleep 3
sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say Server wird neugestartet in...^M"
sleep 1
sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 3^M"
sleep 1
sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 2^M"
sleep 1
sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 1^M"
sleep 0.5
sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "stop^M"
sleep 3
sudo -u ${EXECUTING_USER} screen -admS ${SCREEN_NAME} ${EXECUTION_FILE} &
PID=$!
sleep 3
ps -p ${PID} > /dev/null 2>&1
if [ "$?" -ne "0" ]; then
echo -e "Fehler beim starten von dem ${APPLICATION_NAME}!"
fi;
else
echo -e "Der ${APPLICATION_NAME} läuft nicht!"
fi
elif whoami | grep -q "${EXECUTING_USER}"; then
if screen -list | grep -q ${SCREEN_NAME}; then
echo -e "Der ${APPLICATION_NAME} wird neugestartet! Bitte warte einige Sekunden..."
screen -S ${SCREEN_NAME} -X stuff "save-all^M"
sleep 3
screen -S ${SCREEN_NAME} -X stuff "say Server wird neugestartet in...^M"
sleep 1
screen -S ${SCREEN_NAME} -X stuff "say 3^M"
sleep 1
screen -S ${SCREEN_NAME} -X stuff "say 2^M"
sleep 1
screen -S ${SCREEN_NAME} -X stuff "say 1^M"
sleep 0.5
screen -S ${SCREEN_NAME} -X stuff "stop^M"
sleep 3
screen -admS ${SCREEN_NAME} ${EXECUTION_FILE} &
PID=$!
sleep 3
ps -p ${PID} > /dev/null 2>&1
if [ "$?" -ne "0" ]; then
echo -e "Fehler beim starten von dem ${APPLICATION_NAME}!"
fi;
else
echo -e "Der ${APPLICATION_NAME} läuft nicht!"
fi
else
echo -e "Du hast keine Berechtigung den ${APPLICATION_NAME} neu zu starten!"
fi
;;
status)
if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
echo -e "Der ${APPLICATION_NAME} läuft!"
else
echo -e "Der ${APPLICATION_NAME} läuft nicht!"
fi
elif whoami | grep -q "${EXECUTING_USER}"; then
if screen -list | grep -q ${SCREEN_NAME}; then
echo -e "Der ${APPLICATION_NAME} läuft!"
else
echo -e "Der ${APPLICATION_NAME} läuft nicht!"
fi
else
echo -e "Du hast keine Berechtigung den Status von dem ${APPLICATION_NAME} zu sehen!"
fi
;;
console)
if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
sudo -u ${EXECUTING_USER} script -q -c "screen -rxS ${SCREEN_NAME}"
else
echo -e "Der ${APPLICATION_NAME} läuft nicht!"
fi
elif whoami | grep -q "${EXECUTING_USER}"; then
if screen -list | grep -q ${SCREEN_NAME}; then
script -q -c "screen -rxS ${SCREEN_NAME}"
else
echo -e "Der ${APPLICATION_NAME} läuft nicht!"
fi
else
echo -e "Du hast keine Berechtigung die Console des ${APPLICATION_NAME}s zu öffnen!"
fi
;;
cmd)
if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
if su -c "screen -list" -s /bin/sh ${EXECUTING_USER} | grep -q ${SCREEN_NAME}; then
echo -e "Command gesendet."
sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "$2^M"
else
echo -e "Der ${APPLICATION_NAME} läuft nicht!"
fi
elif whoami | grep -q "${EXECUTING_USER}"; then
if screen -list | grep -q ${SCREEN_NAME}; then
echo -e "Command sent."
screen -S ${SCREEN_NAME} -X stuff "$2^M"
else
echo -e "Der ${APPLICATION_NAME} läuft nicht!"
fi
else
echo -e "Du hast keine Berechtigung die Console des ${APPLICATION_NAME}s zu öffnen!"
fi
;;
backup)
cd /home/arvl
tar cpfz /home/backups/kunden/arvl/mcblkt_backup_"$(date +%d_%m_%y_%H_%M_%S)".tar.gz minecraft
cd /var/www/html/mcwebinterface/mcmapdl
rm mostrecent_mcblkt_backup.tar.gz
cd /home/arvl
tar cpfz /var/www/html/mcwebinterface/mcmapdl/mostrecent_mcblkt_backup.tar.gz minecraft/world minecraft/world_nether minecraft/world_the_end
;;
delbackup)
cd /home/backups/kunden/arvl
if [ "$(ls /home/backups/kunden/arvl | wc -l)" -gt 5 ]; then
ls -t | sed -e '1, 5d' | xargs -d '\n' rm
fi
;;
lsbackups)
echo "Folgende Backups sind verfuegbar "
ls -t /home/backups/kunden/arvl
;;
help)
case "$2" in
start)
echo -e "Benutze: \"${0} ${2}\" um den ${APPLICATION_NAME} zu starten."
;;
stop)
echo -e "Benutze: \"${0} ${2}\" um den ${APPLICATION_NAME} zu stoppen."
;;
status)
echo -e "Benutze: \"${0} ${2}\" um zu sehen ob der ${APPLICATION_NAME} online oder offline ist."
;;
console)
echo -e "Benutze: \"${0} ${2}\" um die ${APPLICATION_NAME}-Console zu öffnen."
;;
cmd)
echo -e "Benutze: \"${0} ${2} <Command>\" um einen command in die ${APPLICATION_NAME}-Console zu senden."
;;
backup)
echo -e "Benutze: \"${0} ${2}\" um ein backup für den ${APPLICATION_NAME} zu erstellen."
;;
delbackup)
echo -e "Benutze: \"${0} ${2}\" um alle bis auf die aktuellsten 5 backups des ${APPLICATION_NAME} zu löschen."
;;
lsbackups)
echo -e "Benutze: \"${0} ${2}\" um alle backups des ${APPLICATION_NAME} aufzuliesten."
;;
*)
echo -e "Benutze: \"${0} help <start|stop|status|console|cmd|backup|delbackup|lsbackups>\" für Hilfe"
esac
;;
*)
echo -e "Benutzung: ${0} {start|stop|restart|status|console|cmd|help|backup|delbackup|lsbackups}"
exit 1
esac
exit 0
Mfg,
Daniel