Настройка cron для запуска сценария оболочки: случайные обои с веб-страницы

Я написал сценарий оболочки, который загружает случайные обои с веб-страницы и устанавливает их в качестве фона каждые 5 часов. Вот сценарий:

#!/bin/bash

countervar=1;
finish=0;
cd /home/guinness/.rwallpaper/
if [ -f counter ]
then
    countervar=`cat counter`
fi

for (( i=$countervar; c<=2000000; i++ ))
do
   echo $i > "counter"
   if [ ! -f wallpaper-$i.jpg ]
   then
    wget "http://wallpapers.wallbase.cc/rozne/wallpaper-$i.jpg"

    if [ -f wallpaper-$i.jpg ]
    then
        gsettings set org.gnome.desktop.background picture-uri "file:///home/guinness/.rwallpaper/wallpaper-$i.jpg"
        exit
    fi
   fi
done

Если я запускаю этот сценарий, он работает как шарм. Я использую cron для запуска этого каждые 5 часов. Проблема в том, что он запускается каждые 5 часов и успешно загружает следующее изображение, но не устанавливает его в качестве обоев. Кто-нибудь может сказать мне, в чем может быть проблема?

2
задан 11 January 2014 в 18:29

2 ответа

Это происходит потому, что cron использует только очень ограниченный набор переменных окружения. Единственная переменная окружения, которая отвечает за правильное выполнение скрипта из вопроса, когда это задано как задание cron, - это DBUS_SESSION_BUS_ADDRESS.

Итак, вы должны экспортировать DBUS_SESSION_BUS_ADDRESS переменную окружения в ваш скрипт. См. Больше объяснений в моем ответе здесь .

В конце ваш сценарий должен выглядеть так:

#!/bin/bash

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

countervar=1;
finish=0;
cd /home/guinness/.rwallpaper/
if [ -f counter ]
then
    countervar=`cat counter`
fi

for (( i=$countervar; c<=2000000; i++ ))
do
   echo $i > "counter"
   if [ ! -f wallpaper-$i.jpg ]
   then
    wget "http://wallpapers.wallbase.cc/rozne/wallpaper-$i.jpg"

    if [ -f wallpaper-$i.jpg ]
    then
        gsettings set org.gnome.desktop.background picture-uri "file:///home/guinness/.rwallpaper/wallpaper-$i.jpg"
        exit
    fi
   fi
done
0
ответ дан 11 January 2014 в 18:29

Проблема, с которой вы сталкиваетесь, почти наверняка состоит в том, что часть переключения сценария в фоновом режиме зависит от переменных среды вашего сеанса X. Cron не устанавливает никаких переменных окружения, поэтому это нарушит эту часть скрипта.

Чтобы обойти эту проблему, вы можете поместить скрипт в цикл while со сном около пяти часов, а затем позвонить и поместить скрипт в такое место, как /etc/X11/Xsession.d/my_script или ~ / .xprofile.

0
ответ дан 11 January 2014 в 18:29

Другие вопросы по тегам:

Похожие вопросы: