Hallo,
zunächst eine kurze Erläuterung meiner Situation:
ich habe auf meinem Server einen Minecraft-(Game)server laufen. Dieser läuft innerhalb eines screens, so dass ich ihm jederzeit via
screen -S $SCREEN_NAME -p 0 -X stuff "`printf "...\r"`"
einen Befehl schicken kann (z.B. via Webinterface zum Neustarten des Servers). Das funktioniert auch alles super.
Ich will die Funktionalität meines "Servermanagementscripts" nun allerdings derart erweitern, dass ein User auch von innerhalb des Spiels Kommandos an mein Script senden kann. Beispielsweise könnte ein beliebiger User dann In-Game ein Kommando wie
!restart-server
tippen, um den Server neu zu starten. Es wären aber auch beliebig komplexe Szenarien bis hin zu Vote-Kicks realisierbar.
Nun zum konkreten Problem:
Mein Script soll jedes Mal ausgeführt werden, wenn ein User des Servers eine Chatnachricht abschickt. Ein Eingriff in die Binaries des Servers kommt für mich nicht in Frage. Wenn jemand eine Chatnachricht absendet, dann erscheint diese sowohl als neue Zeile in der Textausgabe des Servers, also auch in der Datei server.log.
Ist es möglich, automatisch ein Script auszuführen, wenn die server.log-Datei geschrieben wird und/oder sich die Terminalausgabe eines Programmes innerhalb eines screens verändert?
Die "eleganteste" Lösung, die mir im Moment einfällt, wäre das script gemeinsam mit dem Server zu starten und in einer Endlosschleife jede Sekunde die Logfile daraufhin zu überprüfen, ob sie sich geändert hat. Ihr werdet mir aber sicherlich zustimmen, dass dies nicht einmal als Notlösung wirklich geeignet wäre, zum Einen wegen des konstanten CPU- und Speicherverbrauches, und zum Anderen wegen der dadurch entstehenden Verzögerungen von bis zu 1 Sekunde.
Vielen Dank für eure Hilfe, Michael