Configuração do cron para executar um script de shell: papel de parede aleatório de uma página da Web

2

Eu escrevi um script de shell que baixa o papel de parede aleatório de uma página da web e o define como um plano de fundo a cada 5 horas. Aqui está o script:

#!/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

Se eu executar este script, funciona como um encanto. Eu uso o cron para rodar isso a cada 5 horas. O problema é que ele é executado a cada 5 horas e baixa com sucesso a próxima imagem, mas não a define como papel de parede. Alguém pode me dizer qual pode ser o problema?

    
por DalekSupreme 11.01.2014 / 14:40

2 respostas

4

Isso acontece porque o cron usa apenas um conjunto muito restrito de variáveis de ambiente. A única variável de ambiente responsável por executar da maneira certa o script da pergunta, quando definida como uma tarefa agendada, é DBUS_SESSION_BUS_ADDRESS .

Portanto, você deve exportar a variável de ambiente DBUS_SESSION_BUS_ADDRESS em seu script. Veja mais explicações na minha resposta aqui .

No final, seu script deve se parecer com:

#!/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
    
por Radu Rădeanu 11.01.2014 / 15:22
1

O problema que você está encontrando é quase certamente que a parte de troca de plano de fundo do seu script depende de variáveis de ambiente de sua sessão X. O Cron não define nenhuma variável de ambiente, então isso irá quebrar essa parte do script.

Para contornar o problema, você pode colocar o script em um loop while com um sono de aproximadamente cinco horas e, em seguida, chamar colocar seu script em um local como /etc/X11/Xsession.d/my_script ou ~ / .xprofile

    
por xyrix 11.01.2014 / 14:59