aktion bei inaktivem minecraft-server

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
OldGod78
Beiträge: 190
Registriert: 20.04.2016 20:59:51
Kontaktdaten:

aktion bei inaktivem minecraft-server

Beitrag von OldGod78 » 08.02.2017 21:15:28

ich will ein bash-script schreiben, dass eine aktion ausführt wenn ein minecraft-server nicht mehr genutzt wird ... Habt ihr ideen wie ich das überprüfen kann ? eventuell an den logs , wenn darin nichts mehr steht mit "joined the game" ? habe keine idee wie ich das technisch umsetzen kann.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: aktion bei inaktivem minecraft-server

Beitrag von rendegast » 08.02.2017 22:03:17

Gibt es nicht sowas wie 'who' für den minecraft?

Oder eine Art profile.d/ für sich einloggende Benutzer?
Daraus könnte eine lock-Datei unterhalb eines Instanz-Verzeichnisses generiert werden,
beim Ausloggen wird die lock-Datei entfernt.
Ein incrond-Job prüft. ob keine lock-Dateien mehr existieren (entspricht keine Spieler) und löst die Aktion aus.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
sbruder
Beiträge: 333
Registriert: 24.06.2016 13:54:36
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Franken

Re: aktion bei inaktivem minecraft-server

Beitrag von sbruder » 08.02.2017 22:42:20

grad ein Shell-Script geschrieben:

Code: Alles auswählen

#!/bin/bash
if [[ -z $1 ]]; then
  echo "Usage: $0 logfile"
fi
LOGFILE=$1

# Here, you can define the matching regex for the joins and lefts
JOINREGEX='^\[.*\]: .* joined the game$'
LEFTREGEX='^\[.*\]: .* left the game$'

grep='grep -E'
joins=$(cat $LOGFILE|$grep "$JOINREGEX"|wc -l)
lefts=$(cat $LOGFILE|$grep "$LEFTREGEX"|wc -l)
if [[ $joins == $lefts ]]; then
  exit 0
else
  echo "joins: $joins; lefts: $lefts"
  exit 1
fi
Ich weiß jetzt nicht genau, wie die Syntax von Deinem Logfile ist, aber Du kannst ja die regexs anpassen. Ich sicher nicht das schönste Skript, sollte aber funktionieren.

Benutzeravatar
Draal
Beiträge: 532
Registriert: 11.03.2005 14:45:26

Re: aktion bei inaktivem minecraft-server

Beitrag von Draal » 09.02.2017 00:46:01

Hallo OldGod78,

unabhaengig davon, wie der server gestartet wurde, koenntest Du auch mit mcrcon die Spielerzahl abfragen (mit dem Befehl "list").

viele Gruesse

Draal

@mcrcon

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: aktion bei inaktivem minecraft-server

Beitrag von rendegast » 09.02.2017 13:11:20

Unabhängig davon
Alternative minecraft <-> Debianminetest? (jessie-backports 0.4.15 = current)
https://screenshots.debian.net/package/minetest + http://www.minetest.net/
Zuletzt geändert von rendegast am 09.02.2017 13:15:27, insgesamt 2-mal geändert.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: aktion bei inaktivem minecraft-server

Beitrag von uname » 09.02.2017 13:14:10

Die Anwender werden sich über irgendwelche Sockets verbinden. Ohne aktive Verbindungen ist auch niemand online. Man könnte somit die Ausgabe von "netstat -an" auswerten.

OldGod78
Beiträge: 190
Registriert: 20.04.2016 20:59:51
Kontaktdaten:

Re: aktion bei inaktivem minecraft-server

Beitrag von OldGod78 » 09.02.2017 15:26:09

sbruder hat geschrieben:grad ein Shell-Script geschrieben:

Code: Alles auswählen

#!/bin/bash
if [[ -z $1 ]]; then
  echo "Usage: $0 logfile"
fi
LOGFILE=$1

# Here, you can define the matching regex for the joins and lefts
JOINREGEX='^\[.*\]: .* joined the game$'
LEFTREGEX='^\[.*\]: .* left the game$'

grep='grep -E'
joins=$(cat $LOGFILE|$grep "$JOINREGEX"|wc -l)
lefts=$(cat $LOGFILE|$grep "$LEFTREGEX"|wc -l)
if [[ $joins == $lefts ]]; then
  exit 0
else
  echo "joins: $joins; lefts: $lefts"
  exit 1
fi
Ich weiß jetzt nicht genau, wie die Syntax von Deinem Logfile ist, aber Du kannst ja die regexs anpassen. Ich sicher nicht das schönste Skript, sollte aber funktionieren.
danke aber woher weiß das script da wo es nach "joined the game" schaut ? und wie genau funktioniert es generell ?

Benutzeravatar
sbruder
Beiträge: 333
Registriert: 24.06.2016 13:54:36
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Franken

Re: aktion bei inaktivem minecraft-server

Beitrag von sbruder » 09.02.2017 20:45:04

OldGod78 hat geschrieben:danke aber woher weiß das script da wo es nach "joined the game" schaut ? und wie genau funktioniert es generell ?
Na aus $1/dem ersten Aufrufparamter. Funktionieren tut es indem es die Anzahl der Zeilen in denen die beiden Suchausdrücke vorkommen vergleicht und wenn sie gleich sind sich ohne Fehler beendet und wenn sie ungleich sind einen Fehler zurückgibt.

Antworten