linux tail command geht nicht?

2 Antworten

Da stimmt wohl irgend etwas mit dem Pfad nicht. Kommentiere die Zeilen 5 bis 8 mal aus und füge zwischen die Zeilen 4 und 5

echo $SERVERS
ls -l /home/MC/$SERVERS/logs

ein. Kommen da die gewünschten Ergebnisse heraus? Insbesondere: taucht bei dem ls-Befehl auch die Datei latest.log auf?


Bucketgames 
Fragesteller
 24.04.2021, 17:22
 test
ls: cannot access '/home/MC/'$'\r': No such file or directory
ls: cannot access 'test': No such file or directory
ls: cannot access ''$'\r''/logs': No such file or directory

test ist der server

0
AncheCameo  24.04.2021, 17:28
@Bucketgames

Dann hast du das Verzeichnis des Servers nicht auf das Verzeichnis

/home/MC/test

gemountet. Das musst du natürlich erst tun, um auf den Server zugreifen zu können. Das Ergebnis ist eindeutig: der angegebene Pfad ist auf dem Host, von dem aus du das Skript startest, nicht vorhanden.

1
Bucketgames 
Fragesteller
 24.04.2021, 17:30

nein das ist alles eine festplatte ich meinte minecraft server @AncheCameo

0
AncheCameo  24.04.2021, 17:36
@Bucketgames

Da ich den Minecraft Server nicht installiert habe, weiß ich nicht, was er macht, wenn du ihn startest. Aber das spielt keine Rolle für das Skript.

Entscheidend ist, dass du vor dem Start des Skripts sicherstellen musst, dass das Verzeichnis

/home/MC/test/logs

existiert, und dass auch die Datei latest.log vorhanden sein und einen Inhalt haben muss. Der tail-Befehl als solcher ist dagegen korrekt.

1
Bucketgames 
Fragesteller
 24.04.2021, 17:40

Also:

if( -d /home/MC/test/logs/latest.log ) {
uptime=$(tail -n 12 /home/MC/$SERVERS/logs/latest.log | grep Laufzeit: | cut -d ':' -f 5);
tps=$(tail -n 8 /home/MC/$SERVERS/logs/latest.log | grep TPS | cut -d '=' -f 2);
maxmem=$(tail -n 12 /home/MC/$SERVERS/logs/latest.log | grep Maximaler | cut -d ':' -f 5);
mem=$(tail -n 12 /home/MC/$SERVERS/logs/latest.log | grep Reservierter | cut -d ':' -f 5);
}

@AncheCameo

0
AncheCameo  24.04.2021, 17:45
@Bucketgames

Nein, auch nicht. latest.log ist doch wohl eine reguläre Datei, also dann wenigstens

if [ -f /home/MC/test/logs/latest.log ]
then
...
...
fi

Ob deine Variante der Syntax auch funktioniert, weiß ich (noch) nicht, daher habe ich die mir bekannte Syntax genommen. Also: nicht -d, sondern -f

1
AncheCameo  24.04.2021, 17:51
@Bucketgames

Ergänzung: ich weiß nicht, wo du diese Syntax her hast, unter bash funktioniert sie jedenfalls nicht.

1
julihan41  24.04.2021, 18:58
@AncheCameo

Mit den geschweiften Klammern sieht das nach Java oder C/C++ aus. 🤔

1
AncheCameo  24.04.2021, 19:00
@julihan41

Das kann sein. Da der FS aber den Shebang

#!/bin/bash

in seinem Skript hat, dürfte das auch bei ihm nicht funktionieren.

0

echo $SERVERS;

und guck dir mal an was daraus wird .