grumble
Anmeldungsdatum: 28. Juli 2007
Beiträge: 134
|
Ich habe ein Java Programm, das ich auf einem IndustriePC mit XFCE starten soll.
Mit java -jar /home/myuser/xyz.jar
startet es, es funktioniert (sendet Daten in die Cloud) und es kommen auch entsprechende Konsolenausgaben.
Jetzt soll das ganze aber automatisch starten sobald der PC eingeschaltet wird.
Unter "Sessions and Startup" haben ich den gleichen Befehl eingetragen.
In der Cloud kommen nach Neustart keine Daten an.
Mit top
zeigt sich dass Java läuft. Das macht es nicht, wenn ich den Eintrag aus der Autostart entferne.
Also wird anscheinend das xyz.jar nicht richtig ausgeführt oder liefert einen Fehler.
Gibt es eine Möglcihkeit sich den Output des Programmes anzeigen zu lassen, wie wenn man es händisch startet?
|
grumble
(Themenstarter)
Anmeldungsdatum: 28. Juli 2007
Beiträge: 134
|
Hab jetzt einmal einen Teilerfolg:
In der zugehörigen Autostart StartupNotify=true
Terminal=true
gesetzt.
Damit öffnet sich beim Starten ein Terminal für das Programm und es wird dort ausgeführt.
Leider wird es einen Fehler, den ich noch nicht nachvollziehen kann.
Es läuft mit genau dem gleichen Befehl, wenn ich es in einer Konsole händisch starte.
Ich tippe mal auf ein Umgebungsproblem (z.B. falscher Ordner) oder ein Rechteproblem.
|
STRAGIC-IT
Anmeldungsdatum: 3. Januar 2006
Beiträge: 3242
Wohnort: Fürth
|
Hallo grumble,
am einfachsten ist es, wenn Du Dir ein kleines Script schreibst. [/home/myuser/start_xyz.sh] mit dem folgenden Inhalt:
#!/bin/bash
java -jar /home/myuser/xyz.jar
exit Dieses Script setzt Du in den "Eigenschaften" auf AUSFÜHRBAR. In dem Startprogrammbereich lässt Du dieses Script mit folgenden Befehl starten:
/home/myuser/start_xyz.sh & Bye
HS
|
grumble
(Themenstarter)
Anmeldungsdatum: 28. Juli 2007
Beiträge: 134
|
Wenn ich das Fehler spuckende Java Programm im Autostart Terminal mit Ctrl+C schließe,
ist auch sofort das ganze Fenster weg.
Gibt es eine Möglichkeit heraus zu finden als welcher User und in welchem Ordner alles ausgeführt wird?
|
STRAGIC-IT
Anmeldungsdatum: 3. Januar 2006
Beiträge: 3242
Wohnort: Fürth
|
Hallo grumble,
#!/bin/bash
java -jar /home/myuser/xyz.jar > /home/myuser/error.txt
exit Bye
HS
|
grumble
(Themenstarter)
Anmeldungsdatum: 28. Juli 2007
Beiträge: 134
|
Das mit dem Skript habe ich früher schon mal probiert.
Wirft den gleichen Error wie wenn ich es so in der Autostart angebe. Da "java" ja für alles User vorhanden ist und der Skript mit Pfad angegeben wird,
gehe ich davon aus, dass es ein Problem mit dem User ist. Unter welchem User wird denn das Autostart ausgeführt?
|
STRAGIC-IT
Anmeldungsdatum: 3. Januar 2006
Beiträge: 3242
Wohnort: Fürth
|
Hallo grumble,
die Ausführung erfolgt unter dem User der eingeloggt ist. Vielleicht wurde das Script mit SUDO-Rechten installiert. Teste doch mal ob das Wort sudo vor dem java hilft. Bye
HS
|
grumble
(Themenstarter)
Anmeldungsdatum: 28. Juli 2007
Beiträge: 134
|
Es ist leider ein Debian Rechner, also hat er zwar XFCE aber kein sudo.
Weiters ist er nicht mit allzuviel Software ausgestattet.
|
grumble
(Themenstarter)
Anmeldungsdatum: 28. Juli 2007
Beiträge: 134
|
Hab jetzt denn User mit der ID 1000 auch zum root hinzugefügt.
Gleiches Problem.
Also irgendwas ist da faul...
|
grumble
(Themenstarter)
Anmeldungsdatum: 28. Juli 2007
Beiträge: 134
|
Zumindest habe ich jetzt immer die aktuellen Fehlerausgaben dank Pipe –> danke STRAGIC-IT Werd die jetzt mal an den Programmierer weiterleiten.
|
grumble
(Themenstarter)
Anmeldungsdatum: 28. Juli 2007
Beiträge: 134
|
Lösung gefunden:
Es war ein Timing Problem. Irgendetwas war noch nicht verfügbar oder noch nicht richtig gestartet:
sh -c "sleep 120 ; java -jar /home/myuser/xyz.jar"
im Skript hat geholfen. Daher wird nach dem Neustart zwar der Startskript gleich ausgeführt, aber das java erst 120s = 2 Min später ausgeführt.
Jetzt klappt es problemlos. Danke für die Tips!
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
STRAGIC-IT schrieb: Hallo grumble,
#!/bin/bash
java -jar /home/myuser/xyz.jar > /home/myuser/error.txt
exit
Das exit ist überflüssig. Das Script endet auch so, wenn nichts mehr kommt. Mit xy > xy.log leitet man eigentlich nur die Standardausgabe in eine Datei, nicht die Fehlermeldungen, die im Fehlerstrom sind, das ginge mit xy 2> xy.err Beide Ausgaben gemischt mit
Hier hat wohl geholfen, dass der Fehler nicht beim Ausführen von Java auftrat, sondern im von Java gestarteten Programm, so dass die Fehlermeldungen doch im Standardoutput gelandet sind.
Hab jetzt denn User mit der ID 1000 auch zum root hinzugefügt.
Was ist damit gemeint? Zur Gruppe root? Das war ganz schlecht - nicht vergessen, das rückgängig zu machen.
|
grumble
(Themenstarter)
Anmeldungsdatum: 28. Juli 2007
Beiträge: 134
|
Ja, das mit dem hinzufügen zur gruppe root war eine schlechte Idee. Werde ich wieder rückgängig machen, da es ja auch nicht das Problem war. 👍 Das mit dem exit habe ich schon gemerkt. 👍 Das mit den Fehlermeldungen klingt gut. Nur verstehe ich es noch nicht ganz. Heißt dann der Skript:
#!/bin/bash
java -jar /home/myuser/xyz.jar 2> /home/myuser/error.err
Das mit
2>&1
versteh ich überhaupt nicht 😕
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
Wenn das Programm von Hause aus Meldungen aufs Terminal schreibt, auch wenn kein Fehler vorliegt, dann kann man diese Meldungen wie auch die Fehlermeldungen in der Weise, wie sie beim Ausführen ohne Umlenkung in eine Datei durchmischt erscheinen würden auch durchmischt in nur eine Datei schreiben: | # Ausgabe in Datei sammeln
java -jar /home/myuser/xyz.jar > /home/myuser/xyz.log
# Fehler in Datei sammeln
java -jar /home/myuser/xyz.jar 2> /home/myuser/xyz.err
# Ausgabe und Fehler gemischt in Datei sammeln
java -jar /home/myuser/xyz.jar > /home/myuser/xyz.out 2>&1
|
Wenn wir einen Blick nach /dev werfen, dann sehen wir
| l /dev/std*
lrwxrwxrwx 1 root root 15 Sep 10 22:24 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Sep 10 22:24 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Sep 10 22:24 /dev/stdout -> /proc/self/fd/1
|
dass der Standardinput mit 0 nummeriert ist, Standardout mit 1 und Stderr mit 2.
Das 2>&1 heißt der Datenstrom mit Index 2, Stderr, soll nach 1, also Stdout, umgeleitet werden, und der wird ja in die Datei (hier: xyz.out) umgeleitet.
|
grumble
(Themenstarter)
Anmeldungsdatum: 28. Juli 2007
Beiträge: 134
|
wow. cool, da hab ich wieder was dazu gelernt.
Danke für die ausführliche Erklärung. Bin echt froh, dass auf der Kiste Linux rennt, sonst wär ich da nicht so schnell weiter gekommen ☺
|