• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

Blynk.cc - Java-Program in Raspbian schließt bei beenden der ssh-Verbindung

Ungesund

Feiner Herr

Registriert
15 Juli 2013
Beiträge
1.918
Ort
Achterbahn
Heyho,

ich dachte ich frage erstmal hier bevor ich mich an das Hersteller-Forum wende. Folgende Situation:

Ich versuche mich an blynk.cc - das ist so eine IoT Platform die ich gerne für die Heimautomatisierung nutzen möchte. Ich würde gerne einen lokalen Server auf einem Raspberry pie (alt, Model B) laufen lassen.

Installiertes Image auf dem Raspberry ist von der Raspberry Seite:

RASPBIAN STRETCH LITE
Minimal image based on Debian Stretch
Version:November 2017
Release date:2017-11-29
Kernel version:4.9

Zu Blynk.cc gibt es eine java Anwendung, die ich, ebenso wie java selbst via putty/ssh installiert habe.

Starte ich diese Anwendung nun via

pi@raspberrypi:~ $ java -jar server-0.29.0-java8.jar -dataFolder /home/pi/Blynk

dann läuft der Server auch.

Blynk Server 0.29.1-SNAPSHOT successfully started.
All server output is stored in folder '/home/pi/logs' file.

Ich kann auf das Webinterface zugreifen und auch per App zum Server Connecten. Aber eben auch nur so lange ich das putty Fenster offen hab. Sobald ich es schließe, wird wohl auch die java app beendet, Webinterface lässt sich nicht mehr aufrufen und auch die app kann nicht connecten.

Füge ich ein "&" hinter dem ersten Befehl ein, um den Server im Hintergrund laufen zu lassen, bekomme ich im putty zwar eine ID(?) zurück, aber der Server wird nicht gestartet. (nicht aufrufbar)

Nun habe ich versucht über die cronjobs den server automatisch nach einem neustart laufen zu lassen. Dazu habe ich über crontab -e die Zeile

@reboot java -jar /home/pi/server-0.29.0.jar -dataFolder /home/pi/Blynk

Hinzugefügt. Habe das auch mal mit "&" dahinter versucht, aber das funktioniert ebenso nicht. Server wird erst gar nicht gestartet.

Nun bin ich leider ziemlicher Linux noob, mache ich irgendetwas grundlegend falsch? Ich habe noch andere raspberrys auf denen ich Dinge wie retropie, Runeaudio etc. laufen lasse, aber das waren bisher immer fertige images die ich dann nur noch configurieren musste. Nun weiß ich nicht ob ich, wenn ich eine java app unter Raspbian (via ssh) dauerhaft laufen lassen möchte, irgendwas beachten muss das für den geübten Nutzer so selbstverständlich ist dass man es in offiziellen Tutorials nicht erwähnt?

Werde wohl auch mal im blynk Forum nachfragen, aber wollte das erstmal abchecken...
 

Metal_Warrior

Defender of Freedom
Teammitglied

Registriert
10 Aug. 2013
Beiträge
6.830
Ort
/dev/mapper/home
@Ungesund: Du brauchst dafür eigentlich nen Systemdienst. Wie man den schreibt, hab ich irgendwo im Forum mal gezeigt (für ne Firewall, wenn mich nicht alles täuscht), alternativ schreib ich dir morgen kurz was zusammen.

Grund: Beendest du deine Sitzung, meldet sich dein Benutzer ab. Der Server SOLL aber gar nicht als dein Benutzer laufen, sondern als eigenständiger Prozess in eigenem Userkontext. Ergo müsstest du dir eigentlich nen User erstellen, der exklusiv nur diesen Server startet und am Laufen hält, und dafür nutzt man Systemdienste (deren User melden sich nämlich auch nie ab).
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.824
Ort
Midgard
welchen Vorteil bietet das starten als Systemdienst gegenüber screen?

oder anders herum: kann ich bei Systemdiensten auch wieder in den Interaktionsmodus kommen wenn der Server Zur Laufzeit so Befehle annimmt?
Bei screen can ich ja an bestimmte screens reattachen. Da man ja auch problemlos auf Benutzer wechseln kann die sich nicht anmelden können.
 

udzguru

Neu angemeldet

Registriert
1 Dez. 2013
Beiträge
21
Vorteil vom starten als Dienst gegenüber Screen dürfte sein, dass im Falle eines Neustarts (übers Kabel stolpern oder so) der Server wieder automatisch läuft. Bin nicht sicher, ob das bei Screen auch der Fall wäre.
 

Metal_Warrior

Defender of Freedom
Teammitglied

Registriert
10 Aug. 2013
Beiträge
6.830
Ort
/dev/mapper/home
@alter_Bekannter: Screen startet nicht neu beim Reboot, und Screen läuft in deinem Userkontext, was potentiell ein Problem darstellt (weil damit sudo-Rechte und Zugriff auf Logs, SSH-Keys etc., die ein Systemdienst nie hat).

Nein, man kann dann nicht reatachen, aber das will man auch nicht. Üblicherweise ist die Kommandozeile auch nicht Übergabepunkt für weitere Serverkommandos, dafür gibt es eigentlich immer andere Schnittstellen (einzige mir bekannte Ausnahme: Minecraft-Server, aber auch den kann man eigentlich vollständig über den Login als Admin und Nutzung des Chatsystems steuern). Man kann (für diese speziellen Fälle) aber natürlich nen Systemdienst so einrichten, dass man ihn über screen laufen lässt, aber in nem eigenen Userkontext, in den man Loginberechtigung hat. Hab ich beim Minecraftserver so gemacht.
 

musv

Bekannter NGBler

Registriert
15 Juli 2013
Beiträge
3.454
Ort
/dev/null
Füge ich ein "&" hinter dem ersten Befehl ein, um den Server im Hintergrund laufen zu lassen, bekomme ich im putty zwar eine ID(?) zurück, aber der Server wird nicht gestartet. (nicht aufrufbar)
Was logisch ist.

Das Beenden der SSH-Session schließt auch die Shell. Das kommt noch aus der Zeit der Modems. Das Signal heißt SIGHUP (HUP=Hang up). Beim Schließen der SSH-Verbindung wurde bildlich der Modemhörer aufgelegt. Dein Java-Programm ist ein Childprozess Deiner Shell. Schließt du die Shell, beendest du damit auch die Kindprozesse.

Hinzugefügt. Habe das auch mal mit "&" dahinter versucht, aber das funktioniert ebenso nicht. Server wird erst gar nicht gestartet.
Was auch wiederum logisch ist. Du müsstest Dein Java-Programm "dämonisieren", d.h. dass es eigenständig im Hintergrund läuft.

Deine Möglichkeiten:
1. Nohup
https://wiki.ubuntuusers.de/nohup/
Damit wird das o.g. HUP-Signal ignoriert. Der damit gestartete Prozess wird von der Shell gelöst. Beim Beenden der SSH-Verbindung wird die Shell geschlossen. Der mit nohup gestartete Prozess läuft aber unabhängig davon weiter.

2. Screen /Tmux
https://wiki.ubuntuusers.de/tmux/
https://wiki.ubuntuusers.de/Screen/
Machen beides dasselbe.

Sowohl Tmux als auch Screen sind Windowmanager, d.h. grafische Oberflächen - allerdings ohne Grafik. Alles, was darin gestartet wird, läuft auch weiter, wenn die SSH-Verbindung getrennt wird, da die Ausgabe von Tmux/Screen halt einfach nur die Ausgabe und nicht die Shell selbst ist.

Screen oder Tmux solltest du dann verwenden, wenn du interaktiv irgendwelche Menüs über die Konsole bedienen kannst und willst.

Nachteil: Ist Screen/Tmux weg, ist auch Dein Prozess weg. Damit ist ein automatischer Restart des Prozesses beim Rechnerreboot ausgeschlossen.

3. Dienst
Das ist der sauberste Weg. Das Programm wird sauber als Daemon gestartet und läuft als Serverprozess. Irgendwelche Eingaben kannst du da interaktiv natürlich nicht vornehmen.
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.824
Ort
Midgard
@Metal_Warrior:
Nicht nur der Minecraft Server, bei Gameservern ist das bedauerlich oft der Fall. Die werden scheinbar oft für Windows Remotedesktop Admins entwickelt.

Welchen Setup würdest du konkret für solche Sachen empfehlen?
 

Metal_Warrior

Defender of Freedom
Teammitglied

Registriert
10 Aug. 2013
Beiträge
6.830
Ort
/dev/mapper/home
@alter_Bekannter:

1. Erstell dir nen User, nenne ihn nach dem Service. Kann ein normaler User mit Home-Verzeichnis sein, sinnvollerweise wäre sein Home aber zum Beispiel /srv/DIENSTNAME
2. Richte den Service so ein, dass er direkt von dem User aus startet. Alle Skripte/Konfigurationsdateien/Binaries gehören Root und sind auch nur durch Root schreibbar.
3. Schreibe einen Systemd-Dienst, der das Startscript ausführt, das die Screen-Session startet. Der Systemd-Dienst muss so eingerichtet sein, dass er als Running zählt, selbst wenn das Script beendet ist (weil Screen dann noch läuft)
4. Richte den Systemd-Dienst so ein, dass er nach dem Boot startet, bzw. dann, wann er halt starten kann (wahrscheinlich nach mount, networking und evtl. firewall)
5. Richte dir einen SSH-Login auf den User ein, der den Service hostet. Dann kannst du fleißig screen nutzen, um direkt untendrin mit dem Server zu reden.
 

Ungesund

Feiner Herr

Registriert
15 Juli 2013
Beiträge
1.918
Ort
Achterbahn
  • Thread Starter Thread Starter
  • #9
Schon mal danke für die gut nachvollziehbare Erklärung, das macht das Verhalten ja logisch.

Nun zu dem starten als Dienst: Metal_Warrior, wie mache ich das? Ich habe die Threads hier im Linux-Forum mal nach "Dienst" und "Firewall" durchsucht, aber bin mir unschlüssig welchen Thread du meinst, in dem du das mal erklärt hast. Habe das auch mal gegoogelt, habe auch Infos gefunden, aber wenn man so gut wie keine Befehle kennt ist das unglaublich frustrierend, weil man einfach zu wenig weiß um was anpassen zu können...

Wenn du da evtl. ne Anleitung oder ähnliches weißt die man als non-linux Mensch versteht wäre das prächtig.
 
Oben