Eu tenho um script .sh que baixa uma foto do servidor de satélite japonês e a define como uma imagem de plano de fundo. Coloquei-o na lista de inicialização, mas como o executo a cada 5 minutos, automaticamente?
Eu tenho um script .sh que baixa uma foto do servidor de satélite japonês e a define como uma imagem de plano de fundo. Coloquei-o na lista de inicialização, mas como o executo a cada 5 minutos, automaticamente?
Respostas:
Se você deseja o caminho mais fácil e evite descobrir qual variável de ambiente definir:
Adicione o seguinte aos aplicativos de inicialização:
/bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"
Dash> Startup Applications> Add. Adicione o comando:
/bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"
Se você executar o script em seu próprio ambiente (por exemplo, em uma janela do terminal ou em Aplicativos de Inicialização), várias variáveis de ambiente serão definidas. cron
no entanto, executa seu script com um conjunto limitado de variáveis de ambiente.
Como seu script, sem dúvida, usa o gsettings
comando:
gsettings get org.gnome.desktop.background picture-uri <wallpaper>
para definir o papel de parede, quase certamente o comando será interrompido quando for executado cron
.
A desvantagem da "solução preguiçosa" é puramente teórica. Um comando que dorme praticamente continuamente não significa nada para o seu sistema.
Lendo este post e de experiências anteriores, tenho certeza de que a DBUS_SESSION_BUS_ADDRESS
variável de ambiente precisa ser definida.
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ê poderá executá-lo com êxito cron
.
No entanto, você pode muito bem salvar a agitação e escolher a opção preguiçosa.
cpu 0.0%
que imposto estamos falando?
Coloque no seu crontab
.
Abra sua cron
mesa:
crontab -e
Agora adicione:
*/5 * * * * /path/to/script.sh
Não se esqueça de tornar o script executável antecipadamente.
Como seu script depende do X, provavelmente será uma boa ideia adicioná-lo DISPLAY
ao ambiente do script:
*/5 * * * * DISPLAY=:0 /path/to/script.sh
Substitua :0
pelo seu real DISPLAY
(pode ser encontrado echo $DISPLAY
na sessão interativa).
Se necessário, você também pode adicionar a XAUTHORITY
variável de ambiente:
*/5 * * * * DISPLAY=:0 XAUTHORITY="~/.Xauthority" /path/to/script.sh
Mais uma vez, você pode encontrar o valor por echo $XAUTHORITY
.