Не отрабатывает bash скрипт из cron

Есть вот такой простенький скрипт, меняющий тему в соответсвии с промежутком времени:

#!/bin/bash

HOUR=$(date +%H)
if [ "$HOUR" -ge "19" ] || [ "$HOUR" -lt "7" ] 
    then
        gsettings set org.gnome.desktop.interface gtk-theme "Numix-Dark"
        gsettings set org.gnome.shell.extensions.user-theme name "Numix-Dark"
    else
        gsettings set org.gnome.desktop.interface gtk-theme "Numix"
        gsettings set org.gnome.shell.extensions.user-theme name "Numix"
fi

В cron'е вызываю его раз в 10 минут:

# m h  dom mon dow   command
*/10 * * * * bash /home/hackerman/toogle-mode.sh

cron запущен и работает (проверял через systemctl и эксперементально), но скрипт не отрабатывает почему-то (в выводе cat /var/log/syslog | grep "cron" никаких ошибок). Однако при запуске из терминала ручками, скрипт отрабатывает.

В чём может быть причина?


Ответы (1 шт):

Автор решения: Vladislav Tikhomirov

Проблема была на поверхности. cron'у доступен лишь ограниченный набор переменных окружения, а для выполнения моего скрипта необходимо было обращение к gsetting, соответственно нужна была переменная DBUS_SESSION_BUS_ADDRESS

В скрипт были добавлены следующие строки:

PID=$(pgrep gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)

Спасибо этому товарищу

→ Ссылка