Script läut nur wenn von cosole aus gestartet

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    habe ein Problem dass mein script nur von der command line aus startet.

    Druecke ich am Piface den ersten Tater (input 0) sollte scipt ausvonalarm.py starten, das soll /bin/aus starten.

    Leider geht das aber nur wenn ich vorher das script /bin/ausvonalarm.py von der command line aus starte.

    In etc/rc.local habe ich folgendes eingetragen: /usr/bin/python /bin/ausvonalarm.py

    Anbei die 2 scripte.

    ausvonalarm.py

    aus

    Bash
    #!/bin/bash -x
    #  Alle Lichter ausschalten Zone 1,2,3 aber zuerst auf max. machen
    
    #  Zone1-4 auf max.
    
    echo -n -e "\x38\x00\x55" | nc -u -q 1 192.168.0.6 8899
    sleep .1
    echo -n -e "\xB8\x00\x55" | nc -u -q 1 192.168.0.6 8899  # Zone 1 on max. Gang

    Wenn ich es von der command line aus starte und dann Taster 1 (input 0) drueke, geht alles wie gewollt.

    Warum geht es nicht ohne das script von der command liene aus vorher zustarten??

    gruss

    gwaag

  • Hallo,

    wahrscheinlich, weil der Start aus /etc/rc.local irgendwie nicht klappt. /etc/rc.local ist so wie so der angestaubte / veraltetet Weg.

    Schreib' dir eine systemd Service Unit zum Starten des Skripts. Hat den Vorteil, dass du a) die Unit zum Starten manuell starten kannst und direkt mögliche Fehler ausgegeben werden und b) das Logging ins Journal von systemd erfolgt, was du via `journalctl` abfragen kannst. So ist es später relativ einfach zu sehen, wenn das Skript mal crasht. c) kannst du über eine systemd Unit das Skript automatisch neu starten lassen, wenn es mal crasht.

    Last but not least: Python 2 ist in etwas mehr als einem Jahr end of life. Du solltest dein Skript auf Python 3 umstellen. Was hier denke ich kein Problem sein sollte.

    Gruß, noisefloor

  • In der Zwischenzeit habe ich das script in etc/rc.local mit sleep 120 verzoegert gestartet, jetzt scheint es zu funktioniern.

    Wie sind auf deinem PI, die Ausgaben von:

    Code
    systemd-analyze blame | head -n 5
    systemd-analyze blame | grep -i rc-local.service
    systemctl cat rc-local.service

    ?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • 1.

    13.560s networking.service

    5.690s ntp.service

    4.370s apache2.service

    2.750s dhcpcd.service

    1.701s pilight.service

    2.

    387ms rc-local.service

    3.

    Unit file of rc-local.service changed on disk. Run 'systemctl daemon-reload'.

    # /lib/systemd/system/rc-local.service

    # This file is part of systemd.

    #

    # systemd is free software; you can redistribute it and/or modify it

    # under the terms of the GNU Lesser General Public License as published by

    # the Free Software Foundation; either version 2.1 of the License, or

    # (at your option) any later version.

    # This unit gets pulled automatically into multi-user.target by

    # systemd-rc-local-generator if /etc/rc.local is executable.

    [Unit]

    Description=/etc/rc.local Compatibility

    ConditionFileIsExecutable=/etc/rc.local

    After=network.target

    [Service]

    Type=forking

    ExecStart=/etc/rc.local start

    TimeoutSec=0

    RemainAfterExit=yes

    SysVStartPriority=99

    # /etc/systemd/system/rc-local.service.d/ttyoutput.conf

    [Service]

    StandardOutput=tty

  • Auf deinem Pi wird die rc-local.service auch ziemlich schnell (387ms) initialisiert. Da sind evtl. noch nicht alle Ressourcen für deine Anwendung, die aus der rc.local-Datei gestartet werden soll, vorhanden.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Soll ich jetzt alle in /etc/rc.local zu startende scripts mit einigen sekunden sleep verzoegert starten?

    Nein, denn die _anderen_ Scripte sind doch bis dato immer zuverlässig aus der /etc/rc.local gestartet worden, oder?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • wahrscheinlich, weil der Start aus /etc/rc.local irgendwie nicht klappt. /etc/rc.local ist so wie so der angestaubte / veraltetet Weg.


    Schreib' dir eine systemd Service Unit zum Starten des Skripts. Hat den Vorteil, dass du a) die Unit zum Starten manuell starten kannst und direkt mögliche Fehler ausgegeben werden und b) das Logging ins Journal von systemd erfolgt, was du via `journalctl` abfragen kannst. So ist es später relativ einfach zu sehen, wenn das Skript mal crasht. c) kannst du über eine systemd Unit das Skript automatisch neu starten lassen, wenn es mal crasht.

    Zusätzlich zu dem, hat es noch den weiteren Vorteil das man Abhängigkeiten definieren kann, (was genau bei der das verursachende Problem ist) was schon gestartet sein muss bis das angegebene Skript startet

  • Danke fuer die zusaetzliche info.

    Ich habe in der Zischenzeit den aufruf fuer das script aus /etc/rc.local herausgenommen und es mir systemd gemacht.

    Funktioniert soweit. Problem sist aber das im scrip ( erstes post) das script /bin/aus mir subprocess.Popen, manchmal grundlos

    ausgefuehrt wird, so 1-2 mal pro Stunde. Denke aber das liegt nicht am Afruf ueber systemd.

    3 andere scribts die ich jetzt auch ueber systemd aufrufe funktionieren einwandfrei.

    Was meinte noisefloor mit "Du solltest dein Skript auf Python 3 umstellen. Was hier denke ich kein Problem sein sollte."

    Nur #!/usr/bin/env python3 anstelle #!/usr/bin/python, oder noch was anderes??

    gruss

    gwaag

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!