Cronjob & Screen

Jokideb

New Member
Hallo Community des serversupportforums,
Also folgendes ist mein Problem:
Ich betreibe einen Minecraft Server auf meinen Debian 6.0 Server und möchte diesen jede Nacht restarten.
Dies wollte ich ursprünglich per Cronjob realisieren und jede Nacht ein Sh Script ausführen lassen.
Dieses funktioniert ohne Probleme wenn ich es per Console ausführe aber wenn der Cronjob es aufruft werden die Strings die an den Screen gesendet werden nur reingeschrieben aber nicht abgeschickt als hätte man nicht Enter gedrückt.

Sh Script:

Code:
screen -S minecraft -X stuff $'say Server Restart in 3 Minuten!\n'
sleep 60
screen -S minecraft -X stuff $'say Server Restart in 2 Minuten!\n'
sleep 60
screen -S minecraft -X stuff $'say Server Restart in 1 Minuten!\n'
sleep 30
screen -S minecraft -X stuff $'say Server Restart in 30 Sekunden!\n'
sleep 10
screen -S minecraft -X stuff $'say Server Restart in 20 Sekunden!\n'
sleep 10
screen -S minecraft -X stuff $'say Server Restart in 10 Sekunden!\n'
sleep 5
screen -S minecraft -X stuff $'say Server Restart in 5 Sekunden!\n'
sleep 1
screen -S minecraft -X stuff $'say Server Restart in 4 Sekunden!\n'
sleep 1
screen -S minecraft -X stuff $'say Server Restart in 3 Sekunden!\n'
sleep 1
screen -S minecraft -X stuff $'say Server Restart in 2 Sekunden!\n'
sleep 1
screen -S minecraft -X stuff $'say Server Restart in 1 Sekunden!\n'
sleep 1
screen -S minecraft -X stuff $'stop\n'
sleep 150
screen -S minecraft -X stuff $'cd /home/ua/server/avalon\n'
screen -S minecraft -X stuff $'./mc.sh\n'
sleep 180
screen -S minecraft -X stuff $'say Server wurde erfolgreich neugestartet.\n'
screen -S minecraft -X stuff $'dev topten\n'
screen -S minecraft -X stuff $'say Island Topliste wurde aktualisiert.\n'

Crontab:
Code:
47      23      *       *       *       /usr/sbin/ntpdate -b -s ptbtime1.ptb.de
30      0       *       *       *       /home/mc.sh

Ich hoffe ihr könnt mir helfen.

Mfg Jokideb
 
Die Methode über Screen habe ich auch mal eine Zeit lang verwendet. Unter anderen hab ich mir in Shell-Script ein LogBot geschrieben. Leider ist es nicht gerade einfach Variablen in den Befehl zu packen. Aus dem Grund habe ich diese Lösung auch nicht mehr verwendet. Mit Python lassen sich solche Aufgaben effektiver lösen.

Hier gibt es schon ein fertiges Python-Script für Rcon: https://github.com/barneygale/MCRcon
Anstatt eine interaktive Eingabe des Daten, kannst du diese auch direkt im Script speichern:
Code:
#!/usr/bin/python
import mcrcon
import time

host = '127.0.0.1'
port = 6666
pwd = 'Rcon-Passwort'
command = 'say Serverneustart in %s'
gesammt = 180

class Counter:
    def __init__(self,wtime):
        self.wtime = wtime
    def __iter__(self):
        while self.wtime > 0:
            if self.wtime > 60:
                yield (self.output(),60)
                self.wtime -= 60
            if self.wtime <= 60 and self.wtime > 10:
                yield (self.output(),10)
                self.wtime -= 10
            if self.wtime <= 10 and self.wtime > 5:
                yield (self.output(),5)
                self.wtime -= 5
            if self.wtime <= 5:
                yield (self.output(),1)
                self.wtime -= 1
    def output(self):
        if self.wtime > 60:
            return str(self.wtime / 60) + ' Minuten'
        if self.wtime == 60:
            return 'einer Minute'
        if self.wtime < 60 and self.wtime > 1:
            return str(self.wtime) + ' Sekunden'
        if self.wtime == 1:
            return 'einer Sekunde'


r = mcrcon.MCRcon(host, port, pwd)

countdown = Counter(gesammt)
for est, sleeptime in countdown:
    r.send(command % est)
    time.sleep(sleeptime)
#r.command('quit') #Befehl zum beenden des Servers
r.close()

Ich habe leider keinen Minecraft-Server um das zu testen. Es gibt sicherlich auch Plugins, die so eine Aufgabe erledigen können. Wichtig ist, dass dein Startscript den Server in einer Endlosschleife aufruft. Wenn man das ganze weiterspinnt könnte der Countdown ggf. nur doch einen Chatbefehl unterbrochen bzw. verschoben werden.

Edit: Code nochmal überarbeitet. Jetzt sollte er die Zeit richtig runterzählen.
 
Last edited by a moderator:
Back
Top