[20:16] <dreamon> koffeinfriedhof, Guten Abend. Hast du mir einen Tipp, warum der systemd service nicht nach dem Booten läuft. Besser gesagt er wird ausgeführt laut status, aber die tmux session die er aufruft läuft nicht.
[20:17] <dreamon> Erst wenn ich ein "systemctl restart mytmuxsession" mache, dann läuft er ..
[20:18] <koffeinfriedhof> dreamon: Hast du denn aus der user-unit eine system-unit gemacht oder ist der Nutzer eingeloggt? Hinweise im journalctl, das die unit failed? Hast du Abhängigkeiten im Script, wie eine bestehende Netzwerkverbindung oder sowas?
[20:19] <dreamon> Ist im /etc/systemd/system also eine system unit.
[20:19] <dreamon> Es laufen in meinen python script flask Teile die empfangen und senden.
[20:20] <dreamon> systemctl status mytmuxsession -> zeigt succeeded
[20:21] <dreamon> journalctl hab ich ihn nicht gefunden
[20:27] <koffeinfriedhof> Dann schreib in die Unit unter [Install] WantedBy=network-online.target und unter [Unit] After=network-online.target. Du brauchst ja dann wohl zunächst ein laufendes Umfeld. Innerhalb deines Scriptes solltest du dann eine Fehlerbehandlung einbauen. Bspw. mit /usr/bin/logger
[20:28] <dreamon> systemctl status sagt: Active: active (exited) since Mon 2022-09-12 22:21:39 CEST; 5min ago
[20:28] <koffeinfriedhof> Wenn dein Script auch im Fehlerfall 0 zurück gibt, dann „merkt“ systemd ja auch nicht, das was nicht stimmt.
[20:31] <dreamon> wo kommt der logger hin, am anfang?
[20:31] <dreamon> Wo sichert der sein das log?
[20:31] <koffeinfriedhof> Ne. Das ist sowas wie echo, nur schreibt das ins syslog/journal.
[20:32] <koffeinfriedhof> /usr/bin/logger -p 3 -s "Alles geht schief"; journalctl -xe
[20:34] <dreamon> jetzt bin ich verwirrt, das soll in mein Script alles rein?
[20:35] <koffeinfriedhof> Nein. Das ist zum Testen auf der Kommandozeile.
[20:36] <koffeinfriedhof> /usr/bin/logger -p 3 -s -t MeineQuelle "Alles geht schief"; journalctl -xe; # ausführen im Terminal
[20:37] <dreamon> Ok, das verwendest du um einen Marker zu setzten um die Meldung leichter zu finden.
[20:39] <koffeinfriedhof> ja. Wenn du im Script diverse Subprozesse aufrufst, die was machen sollen, dann musst du auch prüfen, ob das erfolgreich war, bevor du das darauf aufbauende Kommando absetzt. Im Fehlerfalle kannst du dir so relevante Informationen ins Log schreiben. Alternativ das `exec 2> /tmp/errordatei` unter die Shebang setzen. Dann hast du da eine Ausgabe mit nur Fehlern.
[20:43] <dreamon> journalctl -xe zeigt die Meldung nicht an, obwohl ich es ins script geschrieben habe..
[20:44] <koffeinfriedhof> Script ausführbar? Journal vom selben Nutzer?
[20:44] <koffeinfriedhof> Du kannst auch mit `journalctl -g MeineQuelle` filtern.
[20:44] <dreamon> mach ich systemctl status zeigt er es aber an. diese Meldung steht am ende "alles geht schief" 
[20:45] <koffeinfriedhof> -xe springt automatisch zum Ende des Journals. Wenn das weiter oben steht, musst du scrollen. Und eben mit dem entsprechenden Nutzer gucken.
[20:47] <koffeinfriedhof> status kannst du auch nehmen, wenn nicht zu viele Meldungen kommen. Du kannst dir auch mit journalctl alles zur Unit anzeigen lassen, etc. Da musst du mal durch die Manpage gucken, was für dich in der Situation am besten passt.
[20:50] <dreamon> habs gefunden → Sep 12 22:38:33 mystrom start-tmux-mystrom+start_flask.sh[284]: <11>Sep 12 22:38:33 pi: Alles geht schief
[20:51] <dreamon> exec
[20:54] <koffeinfriedhof> Prima. Dann kannst du dir jetzt im Script Infos ins Log schreiben, was passiert und wo ggf. Probleme sind.
[20:55] <dreamon> exec >2 errordatei → ist leer nach reboot. Kommt mir fast vor wie gestern, als er einfach gestartet hat und den Process von tmux einfach geschlossen hat, weil er durchlief.
[20:55] <dreamon> Aber ich hab ja Type=oneshot,RemainAfterExit=yes,Restart=no eingebaut.
[20:56] <koffeinfriedhof> Was passiert denn in dem Script?
[20:58] <koffeinfriedhof> sollte auch exec 2> heissen, nicht >2. Sonst schreibst du im aktuellen Verzeichnis in dem sich das System gerade befindet eine Datei mit dem Namen 2.
[20:59] <dreamon> sorry falsch abgetippt.. hab richtig im Script.
[21:00] <koffeinfriedhof> /bin/false || echo Das gibt einen Logeintrag
[21:02] <koffeinfriedhof> So in etwa kannst du deine Funktionen prüfen. Wenn etwas einen Fehler wirft (wie bei /bin/false immer), wird echo aufgerufen.
[21:03] <dreamon> https://pastebin.com/8KAUTf1T → reboote nochmal.
[21:03] <le_bot> Title: dreamon - Pastebin.com (at pastebin.com)
[21:03] <koffeinfriedhof> Aber das führt hier im IRC etwas weit. → https://wiki.ubuntuusers.de/Shell/Bash-Skripting-Guide_für_Anfänger/
[21:04] <dreamon> Ich kann ihn ja manuell aufrufen mit systemctl restart mytmuxsession → merkwürdig das er beim Booten zwar aufruft, aber wohl nicht ausführen kann.
[21:08] <koffeinfriedhof> -n start_flask.py > Da kommt bestimmt ein file not found error. Gib absolute Pfade im Script an oder setze explizit die Umgebungsvariable PATH
[21:08] <dreamon> das /bin/false || echo "Teil", schreibt weder in errordatei 
[21:08] <koffeinfriedhof> Und falls du deswegen cd ins Verzeichnis machst, muss es sowieso ./start_flask.py heißen
[21:09] <dreamon> koffeinfriedhof, ne.. -n name, er zeigt dann im tmux quasi den namen meines ausführbaren Scripts an.. 
[21:10] <dreamon> Wie gesagt der Befehl funktioniert ja.. nur eben wir er bei Reboot nicht abgearbeitet. von der Console aus geht er ohne probleme
[21:10] <koffeinfriedhof> In der Console hast du auch deine Umgebungsvariablen. 
[21:11] <koffeinfriedhof> Was ich nun nicht weiß ist, wie zsh als Shebang behandelt wird, also welche Unterschiede es da gibt. Ich nehme meistens bash oder sh (wenns portabel sein soll)
[21:11] <dreamon> wenn ich /bin/bash start-script.sh schreibe sind dann die Umgebungsvariabeln da?
[21:12] <dreamon> wird getestet hab umgestellt auf bash.
[21:12] <koffeinfriedhof> Stimmt. Es muss nein
[21:12] <koffeinfriedhof> oh. Mischmasch.
[21:13] <koffeinfriedhof> Nur nein ;)
[21:13] <koffeinfriedhof> deine Umgebungsvariablen werden nicht geladen, wenn du das nicht explizit mit einbaust. Brauchst du im Normalfall auch nicht. Lass dir ein env/getenv ausgeben, wenn du wissen willst, was gesetzt ist.
[21:15] <dreamon> ich hab doch den exec 2> /home/pi/errordatei drin. Wenn er beim ausführen von tmux einen fehler kriegt, würde er die doch füllen mit einer Meldung.
[21:15] <koffeinfriedhof> Und das /bin/false war nur ein Beispiel. Das gibt ein normales echo aus, keine Fehlermeldung. Dann müsstest du alles loggen: `exec 2>&1> /pfad/datei`
[21:16] <koffeinfriedhof> Ja. Wenn die Fehler auf stderr ausgegeben werden, dann sollten die in der Datei stehen. stdout wird nicht geloggt.
[21:19] <dreamon> error datei → steht jetzt Teil1 Teil2 drin. Er läuft durch das script und ignort die tmux sachen. damn
[21:20] <koffeinfriedhof> Ignorieren nicht unbedingt. Schreib doch /usr/bin/tmux … || echo Fehlschlag. Dafür war eigentlich das /bin/false-Beispiel gedacht. /bin/false brauchst du nicht verwenden, das ist immer falsch ;)
[21:20] <dreamon> https://pastebin.com/DiEEHkHZ
[21:20] <le_bot> Title: dreamon - Pastebin.com (at pastebin.com)
[21:23] <koffeinfriedhof> So, ich muss aber mal für heute. Bau dir ein wenig Fehlerbehandlung ein, meist sind es ganz einfache Dinge nach dem Motto Kopf→Tisch ;)
[21:23] <dreamon> Danke dir. Ich bin hartnäckig. Gute Nacht.