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. cronno entanto, executa seu script com um conjunto limitado de variáveis de ambiente.
Como seu script, sem dúvida, usa o gsettingscomando:
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_ADDRESSvariá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 cronmesa:
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 DISPLAYao ambiente do script:
*/5 * * * * DISPLAY=:0 /path/to/script.sh
Substitua :0pelo seu real DISPLAY(pode ser encontrado echo $DISPLAYna sessão interativa).
Se necessário, você também pode adicionar a XAUTHORITYvariável de ambiente:
*/5 * * * * DISPLAY=:0 XAUTHORITY="~/.Xauthority" /path/to/script.sh
Mais uma vez, você pode encontrar o valor por echo $XAUTHORITY.