Executando .sh a cada 5 minutos

11

Eu tenho um script .sh que baixa uma foto do servidor do satélite japonês e a define como uma imagem de fundo. Eu coloquei na lista de inicialização, mas como eu executo a cada 5 minutos, automaticamente?

    
por Aleksander Mahnyov 23.02.2016 / 17:08

2 respostas

14

A opção preguiçosa

Se você quiser o caminho mais fácil, evite ter que descobrir qual variável de ambiente definir:

  • Verifique se o seu script inclui o shebang
  • Torne-o executável
  • Adicione o seguinte ao Startup Applications:

    /bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"
    

    Dash > Aplicativos de inicialização > Adicionar. Adicione o comando:

    /bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"
    

Explicação

Se você executar o script em seu próprio ambiente (por exemplo, em uma janela de terminal ou em Aplicativos de inicialização), várias variáveis de ambiente serão definidas. No entanto, cron executa seu script com um conjunto limitado de variáveis de ambiente.
Como seu script, sem dúvida, usa o comando gsettings :

gsettings get org.gnome.desktop.background picture-uri <wallpaper>

para definir o papel de parede, quase certamente o comando irá quebrar quando for executado a partir de cron .

A desvantagem da "solução preguiçosa" é puramente teórica. Um comando que dorme praticamente continuamente significa nada para o seu sistema.

Informação adicional; alternativamente

Lendo esta postagem e de experiências anteriores, tenho certeza de que a variável de ambiente DBUS_SESSION_BUS_ADDRESS precisa ser definido.

Para fazer isso, adicione a seguinte seção no início do seu script (abaixo do shebang):

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

Então você deve conseguir executá-lo com sucesso a partir de cron .

No entanto, você pode muito bem salvar a confusão e escolher a opção preguiçosa.

    
por Jacob Vlijm 23.02.2016 / 17:35
22

Coloque em seu crontab .

Abra sua tabela cron por:

crontab -e

Agora adicione:

*/5 * * * * /path/to/script.sh

Não se esqueça de tornar o script executável de antemão.

Como o seu script depende do X, provavelmente será uma boa ideia adicionar o DISPLAY ao ambiente do script:

*/5 * * * * DISPLAY=:0 /path/to/script.sh

Substitua :0 pelo atual DISPLAY (pode ser encontrado em echo $DISPLAY da sessão interativa).

Se necessário, você também pode adicionar a variável de ambiente XAUTHORITY :

*/5 * * * * DISPLAY=:0 XAUTHORITY="~/.Xauthority" /path/to/script.sh

Novamente, você pode encontrar o valor em echo $XAUTHORITY .

    
por heemayl 23.02.2016 / 17:10