Script manuel geht, per Cronjob nicht

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

    ich habe folgendes bash Script

    Was mache ich damit?

    Ich habe an einem Raspberry einen USB-Pegelwandler für einen Meter-Bus und lese damit Sensoren aus.

    Speicherort /home/pi/bin/read_send_meters_mqtt.sh

    wenn ich dieses script ohne besondere Rechte einfach in der Konsole ausführe, läuft das Script sauber durch.

    Jetzt möchte dieses gerne per Crontab -e für den Start jede Minute ausführen.

    Code
    * * * * * cd /home/pi && bin/read_send_meters_mqtt.sh >> /tmp/mbus_mqtt_neu.log

    Der Cronjob wird auch gestartet. Es werden aber nicht sauber die Daten gelesen.

    Ich habe schonmal mit dem Entwickler gesprochen. Er meinte, das dem Cronjob die Rechte für die USB-Schnittstelle fehlt.

    Kann mir hier einer weiterhelfen? Ich habe schonmal versucht, über

    sudo usermod -a -G dialout pi

    die rechte zu setzten.

    Aber das hat nicht funktioniert.

    Grüße

    Kasper027

  • wenn ich dieses script ohne besondere Rechte einfach in der Konsole ausführe, läuft das Script sauber durch.

    Wenn der User pi das Script aus dem Terminal startet, macht er das mit allen Umgebungsvariablen, einschliesslich HOME= .

    Wenn das Script aus der crontab des Users pi gestartet wird, fehlt das Enviroment (Umgebungsvariavlen), inbesondere HOME= ,sodass das Homeverzeichnis (~ Tilde) nicht verwendet werden kann. Es sind daher absolute Pfade in den Filenamen zu verwenden, oder die fehlenden Umgebungsvariavlen in die crontab einzutragen.

    Servus !

    RTFM = Read The Factory Manual, oder so

  • Wenn der User pi das Script aus dem Terminal startet, macht er das mit allen Umgebungsvariablen, einschliesslich HOME= .

    Wenn das Script aus der crontab des Users pi gestartet wird, fehlt das Enviroment (Umgebungsvariavlen), inbesondere HOME= ,sodass das Homeverzeichnis (~ Tilde) nicht verwendet werden kann. Es sind daher absolute Pfade in den Filenamen zu verwenden, oder die fehlenden Umgebungsvariavlen in die crontab einzutragen.

    Servus !

    Hey,

    erstmal danke für deine Nachricht.

    Ich habe im Script den Pfad für die Addressen angepasst, leider geht es aber immer noch nicht.

    Oder was muss ich hier denn noch genau ändern?

    Was mich halt wundert, dass das Adress-File vorher auch gefunden wurde, da im Log die Adressen ausgegeben werden. Aber die Datenmenge mit 1 Byte viel zu klein ist.

    Grüße Julian

  • Aber die Datenmenge mit 1 Byte viel zu klein ist.

    Wie sind auf deinem PI die Ausgaben von:

    Code
    arp -av
    ping -c 3 192.168.0.34
    bash -x /home/pi/bin/read_send_meters_mqtt.sh

    ? Teste mal was passiert, wenn Du das Script via cronjob, statt minütlich, nur alle 5 Minuten ausführen lässt.

    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

  • Hey rpi444

    Wie sind auf deinem PI die Ausgaben von:

    Code
    arp -av
    ping -c 3 192.168.0.34
    bash -x /home/pi/bin/read_send_meters_mqtt.sh

    ? Teste mal was passiert, wenn Du das Script via cronjob, statt minütlich, nur alle 5 Minuten ausführen lässt.

    Hier einmal die Ausgaben:

    Code
    pi@raspberrypi:~ $ arp -av
    ? (192.168.0.45) at e0:28:6d:93:9f:82 [ether] on wlan0
    Julians-Air.fritz.box (192.168.0.82) at 48:d7:05:c3:4e:73 [ether] on wlan0
    9ce13dc57ed946f9a018c57c861f5790.fritz.box (192.168.0.34) at dc:a6:32:50:96:be [ether] on wlan0
    fritz.box (192.168.0.1) at 1c:ed:6f:03:6f:71 [ether] on wlan0
    Samsung.fritz.box (192.168.0.13) at 8c:79:f5:e5:15:3a [ether] on wlan0
    julians-macbook-air-fritz-box-fritz-box.fritz.box (192.168.0.25) at <incomplete> on wlan0
    Entries: 6    Skipped: 0    Found: 6
    Code
    pi@raspberrypi:~ $ ping -c 3 192.168.0.34
    PING 192.168.0.34 (192.168.0.34) 56(84) bytes of data.
    64 bytes from 192.168.0.34: icmp_seq=1 ttl=64 time=6.35 ms
    64 bytes from 192.168.0.34: icmp_seq=2 ttl=64 time=3.66 ms
    64 bytes from 192.168.0.34: icmp_seq=3 ttl=64 time=3.68 ms
    
    --- 192.168.0.34 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2002ms
    rtt min/avg/max/mdev = 3.662/4.562/6.346/1.261 ms

    Bei 5 min ändert sich von sich aus auch nichts. Menge bleibt viel zu klein.

  • Hier einmal die Ausgaben:

    Code
    9ce13dc57ed946f9a018c57c861f5790.fritz.box (192.168.0.34) at dc:a6:32:50:96:be [ether] on wlan0

    Menge bleibt viel zu klein.

    Und bei der manuellen Ausführung ist das nicht der Fall bzw. dann ist es OK?

    Kannst Du evtl. deinen PI, temporär und nur zum testen, per Kabel mit der FritzBox verbinden?

    Versuch mal, als Alternative zum cronjob, mit einer service-unit und timer-unit.

    EDIT:

    Wie ist auf deinem PI, die Ausgabe von:

    Code
    systemctl show cron | grep -i limit

    ?

    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

  • Mit der Ausgabe kann ich leider gar nichts anfangen:

    Das mit der Service unit werde ich mich jetzt mal ein arbeiten und versuchen zu verstehen.

  • ... jetzt mal ein arbeiten und versuchen zu verstehen.

    Was passiert wenn Du nur als Test und temporär, dieses Script von einem root-cronjob (z. B. in der systemweiten crontab "/etc/crontab") ausführen lässt? Funktioniert es dann auch nicht?

    BTW: Funktioniert es bei manueller Ausführung, wenn Du root bist?

    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

  • Erstmal vielen Dank.

    Ich habe gerade mal schnell mit den Service dies fertig gemacht. Damit läuft es komplett sauber durch.

    Ich hatte es mal als sudo crontab -e eingestellt. Da ging es auch nicht. Also User Root, hatte ich es noch nicht probiert. Aber mit dem Service geht es jetzt ja. Warum halt auch immer....

Jetzt mitmachen!

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