View previous topic :: View next topic |
Author |
Message |
schmidicom Veteran
Joined: 09 Mar 2006 Posts: 1924 Location: Schweiz
|
Posted: Wed Mar 19, 2014 3:35 pm Post subject: exit code 143 |
|
|
Beim beenden eines Hintergrunddienst taucht im Log eine Meldung auf bei der ich mir jetzt nicht so ganz sicher bin was ich davon halten soll und hoffentlich kann einer von euch Licht in die Sache bringen.
Über folgendes service File (welches ich selbst geschrieben habe) wird ein Java Programm erfolgreich gestartet:
Code: | [Unit]
Description=UniFi-Controller
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/java -jar /opt/UniFi/lib/ace.jar start
ExecStop=/usr/bin/java -jar /opt/UniFi/lib/ace.jar stop
[Install]
WantedBy=multi-user.target |
Hier der Aufruf auf der Konsole mit Statusanzeige:
Code: | pc177am UniFi # systemctl start unifi
pc177am UniFi # systemctl status unifi
unifi.service - UniFi-Controller
Loaded: loaded (/etc/systemd/system/unifi.service; disabled)
Active: active (running) since Mi 2014-03-19 16:02:21 CET; 11min ago
Main PID: 967 (java)
CGroup: /system.slice/unifi.service
├─ 967 /usr/lib/jvm//icedtea-7/bin/java -jar /opt/UniFi/lib/ace.jar start
└─1003 bin/mongod --dbpath /opt/UniFi/data/db --port 27117 --logappend --logpath logs/mongod.log --nohttpinterface --bind_ip 127.0.0.1
Mär 19 16:02:21 pc177am systemd[1]: Started UniFi-Controller. |
Aber wenn das ganze dann wieder beendet werden soll kommt dass dabei raus:
Code: | pc177am UniFi # systemctl stop unifi
pc177am UniFi # systemctl status unifi
unifi.service - UniFi-Controller
Loaded: loaded (/etc/systemd/system/unifi.service; disabled)
Active: failed (Result: exit-code) since Mi 2014-03-19 16:14:30 CET; 1s ago
Process: 1106 ExecStop=/usr/bin/java -jar /opt/UniFi/lib/ace.jar stop (code=exited, status=0/SUCCESS)
Process: 967 ExecStart=/usr/bin/java -jar /opt/UniFi/lib/ace.jar start (code=exited, status=143)
Main PID: 967 (code=exited, status=143)
Mär 19 16:02:21 pc177am systemd[1]: Started UniFi-Controller.
Mär 19 16:14:29 pc177am systemd[1]: Stopping UniFi-Controller...
Mär 19 16:14:30 pc177am systemd[1]: unifi.service: main process exited, code=exited, status=143/n/a
Mär 19 16:14:30 pc177am systemd[1]: Stopped UniFi-Controller.
Mär 19 16:14:30 pc177am systemd[1]: Unit unifi.service entered failed state. |
Der Prozess wird zwar beendet aber was mich etwas irritiert sind die Ausgaben "failed" und "(code=exited, status=143)", welche auf der Konsole auch mit roter Schrift hervorgehoben werden.
Kann mir einer sagen ob ich mir deswegen sorgen machen muss? _________________ Lenovo - ThinkPad P16s Gen 2 - 21K9CTO1WW |
|
Back to top |
|
|
Christian99 Veteran
Joined: 28 May 2009 Posts: 1668
|
Posted: Wed Mar 19, 2014 4:32 pm Post subject: |
|
|
Das "failed" ist schon eine interpretation des exitcodes. per konvention heißt ein exit code 0 das alles ok ist !=0 heißt, das etwas "unnormal" ist. was "unnormal" ist hängt aber von deinem programm ab. da müsstest du dann mal in der dokumentation deines programmes nachforschen, was dieser exit-code genau bedeutet. |
|
Back to top |
|
|
schmidicom Veteran
Joined: 09 Mar 2006 Posts: 1924 Location: Schweiz
|
Posted: Wed Mar 19, 2014 7:07 pm Post subject: |
|
|
Die Doku von dieser Java-App gibt leider nicht wirklich viel her, genau genommen ist es nicht einmal eine Doku sondern eher eine Kurzanleitung. Und die sagt einem lediglich wie das Programm gestartet/beendet wird und in welcher Datei die Einstellungen gespeichert sind.
Eine etwas längere Suche ergab das hier: https://community.oracle.com/message/6377073#6377073
Aber wenn das Programm den Rückgabewert selbst bestimmt, kann dieser wohl wirklich alles mögliche bedeuten. _________________ Lenovo - ThinkPad P16s Gen 2 - 21K9CTO1WW |
|
Back to top |
|
|
ChrisJumper Advocate
Joined: 12 Mar 2005 Posts: 2390 Location: Germany
|
Posted: Wed Mar 19, 2014 10:05 pm Post subject: |
|
|
schmidicom,
bestimmt hast du archlinux - systemd - Writing custom .service file schon zumindest überflogen.
Hieraus geht ja folgendes hervor:
Quote: | Active: failed (Result: exit-code) since Mi 2014-03-19 16:14:30 CET; 1s ago
Process: 1106 ExecStop=/usr/bin/java -jar /opt/UniFi/lib/ace.jar stop (code=exited, status=0/SUCCESS)
Process: 967 ExecStart=/usr/bin/java -jar /opt/UniFi/lib/ace.jar start (code=exited, status=143)
Main PID: 967 (code=exited, status=143) |
Systemd hat mit einem zweiten Kommando das erste herunter gefahren. Daher "stürzt" der Prozess mit dem du dein Programm gestartet hast ab.
Aus deinem Community Oracle Link hebe ich mal folgendes hervor:
843810 wrote: | Finally I found my issue. Actually there was an external process which kills this java sub-process and all I can see was 143 exitcode. The -Xrs switch didn`t helped at all. |
843810 wrote: | In my case there was an Anthill agent process which is running Ant. |
Ich finde das passt ganz gut. Am besten du schaust mal wie das Programm verfährt, ob es selber seine Subroutinen startet und verwaltet. Du kannst es ja auch ein wenig Observieren beim Start in einer Konsole. Forkt es, legt es eine PID-File an. Gibt es Konfigurationen dafür und so weiter. Mit einer PID könntest du das zumindest auch bei Systemd anders lösen. Finden sich weitere Hinweise in der gestarteten jar-Datei oder ein anderer Befehl zum beenden des Prozesses?
Denke bei deinem Script fehlt noch was oder das ganze ein wenig anpassen. Für Systemd sind die beiden Befehle zum starten und zum Stoppen aber offensichtlich zwei verschiedene Befehle, mit unterschiedlichen Prozessen.
Probiere doch mal Typ=forking vielleicht klappt es auch ohne eine explizite PID. Eventuell verfährt Systemd dann anders mit der erzeugten PID beim ausführen des ExecStop Befehles.
Mir fehlt bei den ganzen uinit Files immer das Ampersend, welches in der Shell den Befehl ja in den Hintergrund legt. Wobei ich auch denke das Systemd dies immer von alleine macht. |
|
Back to top |
|
|
schmidicom Veteran
Joined: 09 Mar 2006 Posts: 1924 Location: Schweiz
|
Posted: Thu Mar 20, 2014 7:04 am Post subject: |
|
|
ChrisJumper wrote: | Systemd hat mit einem zweiten Kommando das erste herunter gefahren. Daher "stürzt" der Prozess mit dem du dein Programm gestartet hast ab. |
Sollte es aber nicht denn auf der Konsole muss man das Programm ebenfalls auf diese Weise beenden und da exitet es mit 0 wie man mit strace ziemlich gut sehen kann.
Code: | ....
clone(child_stack=0x7fb688e88ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7fb688e899d0, tls=0x7fb688e89700, child_tidptr=0x7fb688e899d0) = 4528
futex(0x7fb688e899d0, FUTEX_WAIT, 4528, NULL) = 0
exit_group(0) = ?
+++ exited with 0 +++ |
ChrisJumper wrote: | Ich finde das passt ganz gut. Am besten du schaust mal wie das Programm verfährt, ob es selber seine Subroutinen startet und verwaltet. Du kannst es ja auch ein wenig Observieren beim Start in einer Konsole. Forkt es, legt es eine PID-File an. Gibt es Konfigurationen dafür und so weiter. Mit einer PID könntest du das zumindest auch bei Systemd anders lösen. Finden sich weitere Hinweise in der gestarteten jar-Datei oder ein anderer Befehl zum beenden des Prozesses? |
Ich bin mir jetzt nicht ganz sicher aber wenn pstree sowas anzeigt dann forkt der Prozess wohl wirklich:
Code: | ├─konsole(846)─┬─bash(855)───strace(5215)───java(5215)─┬─mongod(5215)─┬─{mongod}(5215)
│ │ │ ├─{mongod}(5215)
│ │ │ ├─{mongod}(5215)
│ │ │ ├─{mongod}(5215)
│ │ │ ├─{mongod}(5215)
│ │ │ ├─{mongod}(5215)
│ │ │ ├─{mongod}(5215)
│ │ │ ├─{mongod}(5215)
│ │ │ ├─{mongod}(5215)
│ │ │ ├─{mongod}(5215)
│ │ │ ├─{mongod}(5215)
│ │ │ ├─{mongod}(5215)
│ │ │ └─{mongod}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ ├─{java}(5215)
│ │ └─{java}(5215) |
Ich werde das Servicefile mal auf forking umstellen und sehen was dann passiert.
Zum verhalten der Java-App möchte ich noch sagen das sie sich auch auf der Konsole nicht von selbst in den Hintergrund versetzt, sie verhält sich eher wie cp, rm und so weiter.
Hier noch die wirklich sehr kurze Kurzanleitung: http://shschmid.dyndns.ch/owncloud/public.php?service=files&t=94d39bab068ebc4fb7dd05fadd9132d1
EDIT:
Also das mit dem forking in der service Datei war keine gute Idee dann versucht systemd ewig das Programm zu starten bis irgendwann ein Timeout alles abwürgt. Mal sehen ob sich im Forum von UniFi eine bessere Möglichkeit finden lässt dieses Ding zu starten oder zumindest mal eine Auflistung welche Kommandos die ace.jar kennt. _________________ Lenovo - ThinkPad P16s Gen 2 - 21K9CTO1WW |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|