[GELÖST] Bash-Script startet nicht per Crontab

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Kaheto
Beiträge: 126
Registriert: 08.06.2016 22:28:50

[GELÖST] Bash-Script startet nicht per Crontab

Beitrag von Kaheto » 23.10.2021 13:56:23

Hi,

ich versuche gerade auf meinem Desktop (KDE, XFce) dieses Script für die Batterie-Überwachung via User-Crontab zu starten:

Code: Alles auswählen

#!/bin/bash

BATTERY=`acpi | awk '{print $4}' | cut -c 1-2`
STATUS=`acpi | awk '{print $3}'| cut -c 1-4`
if [[ $BATTERY -ge 80 ]] && [[ $STATUS == "Char"  ]]
then
        notify-send --urgency=critical  --expire-time=5000  -i /usr/share/icons/Adwaita/256x256/legacy/battery-full.pn "Battery is loaded with $BATTERY%!" "The laptop can be taken from the charging current!"
elif [[ $BATTERY -le 40 ]] && [[ $STATUS == "Disc"  ]]
then
        notify-send --urgency=critical  --expire-time=5000  -i /usr/share/icons/Adwaita/256x256/legacy/battery-caution.png "Battery has reached $BATTERY%!" "The laptop must be connected to the charging current!"
fi
exit
Der Crontab-Eintrag ist auf alle 5 Minuten eingestellt:

Code: Alles auswählen

*/2 * * * * /usr/local/bin/batteryCheck.sh
Das Script startet aber nicht, sondern nur wenn es direkt manuell aufgerufen wird. Das ist aber nicht Sinn und Zweck.

Viele Grüße
Kaheto
Zuletzt geändert von Kaheto am 24.10.2021 10:27:31, insgesamt 1-mal geändert.

tobo
Beiträge: 1993
Registriert: 10.12.2008 10:51:41

Re: Bash-Script startet nicht per Crontab

Beitrag von tobo » 23.10.2021 15:11:43

Kaheto hat geschrieben: ↑ zum Beitrag ↑
23.10.2021 13:56:23
Der Crontab-Eintrag ist auf alle 5 Minuten eingestellt:
Alle 2 Minuten.
Das Script startet aber nicht [...]
Das ist doch aber nur deine Vermutung, weil du kein notify-send siehst? Cron hat erstmal keine Verbindung zum Bildschirm, sondern schreibt in Dateien - verwende mal ein "DISPLAY=:0" vor deinen beiden notify-send.

Code: Alles auswählen

DISPLAY=:0 notify-send ...

Kaheto
Beiträge: 126
Registriert: 08.06.2016 22:28:50

Re: Bash-Script startet nicht per Crontab

Beitrag von Kaheto » 23.10.2021 17:17:42

tobo hat geschrieben: ↑ zum Beitrag ↑
23.10.2021 15:11:43
Das ist doch aber nur deine Vermutung, weil du kein notify-send siehst? Cron hat erstmal keine Verbindung zum Bildschirm, sondern schreibt in Dateien - verwende mal ein "DISPLAY=:0" vor deinen beiden notify-send.

Code: Alles auswählen

DISPLAY=:0 notify-send ...
Danke für den Hinweis, der ist aber nicht zielführend. Das hilft auch nicht

Code: Alles auswählen

*/2 * * * * export DISPLAY=:0 && /usr/local/bin/batteryCheck.sh

tobo
Beiträge: 1993
Registriert: 10.12.2008 10:51:41

Re: Bash-Script startet nicht per Crontab

Beitrag von tobo » 23.10.2021 18:09:35

Kaheto hat geschrieben: ↑ zum Beitrag ↑
23.10.2021 17:17:42
Danke für den Hinweis, der ist aber nicht zielführend.
Bei mir würde das (#1) funktionieren.

Vielleicht ist es abhängig von deiner Umgebung - jedenfalls würde ich dann erstmal dazu raten, dass du überprüfst, ob das Skript tatsächlich ausgeführt wird (z.B. mit einen date >> "${HOME}/FILE" oben im Skript).
Zuletzt geändert von tobo am 23.10.2021 19:22:32, insgesamt 1-mal geändert.

Kaheto
Beiträge: 126
Registriert: 08.06.2016 22:28:50

Re: Bash-Script startet nicht per Crontab

Beitrag von Kaheto » 23.10.2021 18:55:23

Das habe ich bereits auch gecheckt. In der /var/log/syslog wird

Code: Alles auswählen

Oct 23 18:50:01 ticket CRON[9932]: (kaheto) CMD (export DISPLAY=:0 && notify-send 'testing')
Oct 23 18:50:01 ticket dbus-daemon[9865]: [session uid=1000 pid=9863] Activating service name='org.freedesktop.Notifications' requested by ':1.6' (uid=1000 pid=9933 comm="notify-send testing ")
ausgeführt. Ich habe das mit

Code: Alles auswählen

*/1 * * *  *   DISPLAY=:0 && notify-send 'testing'
getestet.
Bzw.

Code: Alles auswählen

Oct 23 19:02:01 mombasa CRON[3875]: (kaheto) CMD (export DISPLAY=:0 && /usr/local/bin/batteryCheck.sh)

tobo
Beiträge: 1993
Registriert: 10.12.2008 10:51:41

Re: Bash-Script startet nicht per Crontab

Beitrag von tobo » 23.10.2021 19:08:30

Ok, wie vermutet liegt es an der Darstellungsfläche für notify-send. Das muss dann jemand beantworten, der deine Umgebung besser einschätzen kann.

Kaheto
Beiträge: 126
Registriert: 08.06.2016 22:28:50

Re: Bash-Script startet nicht per Crontab

Beitrag von Kaheto » 23.10.2021 19:21:42

tobo hat geschrieben: ↑ zum Beitrag ↑
23.10.2021 19:08:30
Ok, wie vermutet liegt es an der Darstellungsfläche für notify-send. Das muss dann jemand beantworten, der deine Umgebung besser einschätzen kann.
Scheint so der Fall zu sein, denn auf xcfe da funktioniert "export DISPLAY=:0" im Script.

Kaheto
Beiträge: 126
Registriert: 08.06.2016 22:28:50

Re: Bash-Script startet nicht per Crontab

Beitrag von Kaheto » 24.10.2021 10:27:05

Die Lösung liegt in einem Sicherheitsfeature von KDE5 (siehe her: https://www.linuxquestions.org/question ... 175692441/) und es gilt "DBUS_SESSION_BUS_ADDRESS" für diesen einen Benutzer zu modifizieren. Im Script ist also folgender Code hinzuzufügen:

Code: Alles auswählen

username=$(/usr/bin/whoami)
pid=$(ps -u $username e | grep -m 1 DBUS_SESSION_BUS_ADDRESS | awk '{print $1}')
dbus=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$pid/environ | sed 's/DBUS_SESSION_BUS_ADDRESS=//')
export DBUS_SESSION_BUS_ADDRESS=$dbus
Unter diesen Umständen funktioniert das Script auch via Cronjob auf KDE5. :THX:

tijuca
Beiträge: 297
Registriert: 22.06.2017 22:12:20

Re: [GELÖST] Bash-Script startet nicht per Crontab

Beitrag von tijuca » 24.10.2021 10:59:11

Diese Variable gibt es für jeden eingeloggten Benutzer in den Umgebungsvariablen.

Code: Alles auswählen

$ env | grep DBUS
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
Wenn man dann auch noch systemd benutzt dürfte diese so oder so auch der systemd-timer Unit zur Verfügung stehen wenn in dieser angibt, dass der Aufruf für/als $(USER) ausgeführt werden soll. Ist meine Vermutung, habe das jetzt nicht getestet.

Antworten