Jump to content
Unity Insider Forum

*.x86_64 Programm durch Java öffnen ?


Overload

Recommended Posts

Moin Leute =)

nachdem ich das letzte mal so gute Erfahrungen gemacht habe, bin ich so frei und benötige bitte nochmal eure Hilfe.

Ich habe einen headless Gameserver kompiliert und auf einen Vserver geschoben.
Nun läuft ein java Programm welches den Gameserver-ordner kopiert, umbenennt und den Server startet.
Der Gameserver liest eine *.txt datei aus und verwertet die daten aus der txt datei.

Nun zum Problem: Jedes mal wenn das java Programm egal ob mit exec oder mit processbuilder den server startet, kann der Gameserver die textfile nicht lesen.
Startet man den gameserver von hand funktionert alles ohne Probleme.

Sowohl das java Programm als auch der Gameserver werden immer vom selben User behandelt (kopiert, umbenannt und gestartet).

Die Idee dahinter ist, dass das Java Programm in Zusammenspiel mit MySql und einer php API das Matchmaking übernimmt, bei Bedarf einen Gameserver startet und die spieler auf den Gameserver routet. 

Wo ist mein Problem ? :-) Vielen Dank für eure Mühe

Link zu diesem Kommentar
Auf anderen Seiten teilen

Schwer zu sagen wo das Problem liegt, aber wenn es ein Unix/Linux-System ist tippe ich mal auf ein Rechteproblem. Ich empfehle dir aber unbedingt den Unityserver ein Log-File schreiben zu lassen, welches den Fehler beim Öffnen der Txt-Datei protokolliert, dann weißt du es genau. 
Du kannst auch mal einen Test machen und die TXT-Datei an eine vordefinierte Stelle legen, wo ein Public-Zugriff auf den Lesezugriff eingestellt ist. Wenn dies funktioniert, dann fehlen dir nach dem Umkopieren der TXT-Datei ggf. die Leserechte? 
So wie ich Unix/Linux "kenne" kann man sich nicht sicher sein, daß ein Javaprozeß die Rechte des aufrufenden Users weiterreicht. Wobei es schon verwunderlich ist, wenn man keine Leserechte hat, die sind normalerweise meist per Default verfügbar.
Wie gesagt ich wurde an 2 Stellen "suchen":
a.) stimmt der Pfad zur TXT-Datei die der Server verwendet
b.) stimmen die Leserechte des Servers bezüglich der TXT-Datei

Beides würde ich über das Serverlog prüfen und jeden Fehler der beim Lesen der TXT-Datei serverseitig entsteht ins Log schreiben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Guten Morgen Zer0Cool,

vielen dank für deine Antwort. Das mit den Rechten haben wir auch schon im Verdacht.
So richtig verdichten kann ich die Vermutungen allerdings nicht, da ich nicht an die logfile komme.

Hier mal die Ausgabe der SSH Console:
 

Set current directory to /home/server/gameserver/template
Found path: /home/server/gameserver/template/gameserver.x86_64
Mono path[0] = '/home/server/gameserver/template/gameserver_Data/Managed'
Mono config path = '/home/server/gameserver/template/gameserver_Data/Mono/etc'
Player data archive not found at `/home/server/gameserver/template/gameserver_Data/data.unity3d`, using local filesystem
PlayerPrefs - Creating folder: /home/server/.config/unity3d/XXX
CreateDirectory '/home/server/.config' failed:  (current dir: /home/server/gameserver/template/gameserver_Data)
PlayerPrefs - Creating folder: /home/server/.config/unity3d/XXX/XXXX
CreateDirectory '/home/server/.config' failed:  (current dir: /home/server/gameserver/template/gameserver_Data)
Logging to /home/server/.config/unity3d/XXX/XXXX/Player.log

Der Ordner .config wird nie erstellt... Der Server läuft aber... Wo liegt der Fehler ? Was hab ich falsch gemacht ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Schwer zu sagen wo das Problem ist. 

Vielleicht musst du dein Home-Verzeichnis ($HOME) auf "/home/server/gameserver/template" umstellen (da kenne ich deine Umgebung nicht gut genug)?!
Ich vermute dein Home-Verzeichnis steht auf "/home/server".

Mich wundert warum "/home/server/.config" nicht erstellt werden kann? Fehlen hier die Rechte?

Vielleicht versucht Unity auch die PlayerPrefs an einer Stelle anzulegen, wo die Rechte nicht passen.
Hier ist die Stelle wo Unity die PlayerPrefs anlegt. Wenn Unity da die Rechte fehlen könnte das ein Problem sein.

~/.config/unity3d/[CompanyName]/[ProductName] 


Schau dir auch mal das Player-Logfile an, vielleicht hilft das weiter, es sollte dort liegen (kann man beim Serverstart auch umstellen):

~/.config/unity3d/CompanyName/ProductName/Player.log

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dank deiner Gedanken habe ich die Fehler gefunden.
Das Loggingproblem war tatsächlich ein Rechteproblem. Nachdem ich das Homeverzeichnis dem user per chown etc zugewiesen habe, läuft jetzt das logging.
Dadurch dass das Logging läuft, konnte ich sehen, dass das Unity Programm den Applicationpfad vom Javaprogramm verwendete statt sein eigenes. Dank Application.dataPath und ein bißchen replacen liest er jetzt auch die Textfiles der einzelnen Instanzen.

Vielen Dank nochmal ! Du hattest Recht :-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...