Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: crontab script start wel, maar doet het niet. In de terminal werkt het wel.  (gelezen 1215 keer)

Offline bart85

  • Lid
Dit is een script dat met crontab iedere 5 minuten word uitgevoerd.
random_wallpaper.sh:
#!/bin/bash
echo $USER >> $HOME/testcrontab

mode=${mode:-fill}
output=${output:-\*}

# Directory containing wallpapers
WALLPAPER_DIR="/usr/share/wallpapers"

# Select a random wallpaper
RANDOM_WALLPAPER=$(find "$WALLPAPER_DIR" -type f -name "*.jpg" | shuf -n 1)
wallpaper=$(basename $RANDOM_WALLPAPER)

[[ $(pgrep ^swaybg) ]] && pkill ^swaybg

# Set the wallpaper

notify-send -t 5000 "wallpaper changed: $wallpaper"
swaybg -m $mode -o "$output" -i "$RANDOM_WALLPAPER" &

Mijn crontab configuratie:
*/5 * * * * /home/bartveurink/bin/random_wallpaper.sh
Het programma werkt wel als hij in de terminal word gestart, maar niet als crontab start. Het haalt wel de background, wallpaper weg, maar stelt geen nieuwe background in. De tweede regel is om te testen, Deze regel werkt juist.
« Laatst bewerkt op: 2024/06/21, 17:42:08 door bart85 »
Je leert maar mooi over weg gaan met de commandline.
Linus: "I'm happy with the people who are wandering around looking at the stars but I am looking at the ground and I want to fix the pothole before I fall in."
I look to the clouds behind me and see the thunder coming.

Offline Bloom

  • Lid
Dat komt omdat cron de bash-omgeving niet initialiseert zoals de terminal doet doet. Daardoor zijn allerlei omgevingsvariabelen niet gedefinieerd. $USER bestaat bijvoorbeeld niet in cron. En een wallpaper veranderen lukt ook niet omdat de cron-omgeving de $DISPLAY variabele niet heeft die de terminal wél heeft en die hij nodig heeft om een wallpaper aan een actief scherm te koppelen.
Zet deze instructies bovenaan je script en dan zal de uitvoering in cron normaal wel lukken:
export DISPLAY=:0.0
XFPID=$(echo $(ps -C xfce4-session -o pid=))
[[ ! -t 1 ]] && export $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$XFPID/environ|tr -d '\0')
Deze instructies zijn voor een XFCE desktopomgeving, maar iets soortgelijks moet ook werken voor Gnome, KDE of nog andere.


Offline bart85

  • Lid
Het is voor de achtergrond voor sway compositor. Sway draait op wayland. Achtergrond kan met het programma swaybg worden ingesteld in de terminal.
Sway maakt geen gebruik van x11.
Hoe mijn crontab aanpassen?
« Laatst bewerkt op: 2024/06/21, 17:25:28 door bart85 »
Je leert maar mooi over weg gaan met de commandline.
Linus: "I'm happy with the people who are wandering around looking at the stars but I am looking at the ground and I want to fix the pothole before I fall in."
I look to the clouds behind me and see the thunder coming.

Offline Bloom

  • Lid
Dan heb je deze instructies nodig vooraan je script:
WAYLAND_DISPLAY=wayland-0
SWAYSOCK=$(find /run/user/1000/sway*sock)
Let wel op dat de variabelen mode en output niet gedefinieerd zijn als cron dat script start.

Offline bart85

  • Lid
Moeten deze regels in de crontab of in mijn bash script?
Je leert maar mooi over weg gaan met de commandline.
Linus: "I'm happy with the people who are wandering around looking at the stars but I am looking at the ground and I want to fix the pothole before I fall in."
I look to the clouds behind me and see the thunder coming.

Offline Bloom

  • Lid
Moeten deze regels in de crontab of in mijn bash script?
Vooraan in je bash-script. Je kunt omgevingsvariabelen ook in crontab definiëren maar niet als er nog bash-functies of besturingssysteemprogramma's aangeroepen moeten worden (zoals $(find...) enz.).

Offline bart85

  • Lid
export WAYLAND_DISPLAY=wayland-1
export SWAYSOCK=$(ls /run/user/$(id -u)/sway-ipc.*.sock)
export I3SOCK=$(ls /run/user/$(id -u)/sway-ipc.*.sock)
export XDG_SEAT=seat0
export XDG_VTNR=1
export XDG_SESSION_ID=1
export XDG_RUNTIME_DIR=/run/user/1000

Deze regels aan mijn bash script toegevoegd. Het kan zijn dat een van de variabelen overbodig is, maar het werkt.
Je leert maar mooi over weg gaan met de commandline.
Linus: "I'm happy with the people who are wandering around looking at the stars but I am looking at the ground and I want to fix the pothole before I fall in."
I look to the clouds behind me and see the thunder coming.