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?
Experimente o cronmaker.com, onde você pode criar expressões cron e colocá-lo com o crontab -e #
Estamos no Borg
2
A imagem muda mesmo a cada 5 minutos? Tente usar um intervalo que crie menos carga desnecessária no servidor de destino. Ou faça o download apenas se o arquivo for realmente alterado.
til_b 24/02
1
A propósito, qual é o URL dos fundos espaciais?
21716 Bohdan_trotsenko #
Respostas:
14
A opção preguiçosa
Se você deseja o caminho mais fácil e evite descobrir qual variável de ambiente definir:
Verifique se o seu script inclui o shebang
Torne executável
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"
Explicação
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.
Informação adicional; alternativamente
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):
@AleksanderMahnyov De nada. Ainda bem que funciona :)
Jacob Vlijm
2
É muito melhor usar um trabalho cron.
Luka Ramishvili 24/02
1
@LukaRamishvili Obrigado pelo comentário. No entanto: a. E por que isto? um comando de suspensão não significa nada para o seu sistema. b. Eu até incluí a opção.
Jacob Vlijm
1
Caso contrário, uma boa pesquisa sobre as variáveis da sessão do gnome ajudaria muito o OP, pois isso seria necessário de qualquer maneira.
Luka Ramishvili 24/02
2
Eu apenas olhei: De cpu 0.0%que imposto estamos falando?
Jacob Vlijm
24
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:
Não tenho certeza se ele funciona com variáveis de ambiente limitadas de cron, mas vamos ver se OP menciona ele funciona :)
Jacob Vlijm
1
@AleksanderMahnyov Por favor edite sua pergunta para adicionar o script, difícil dizer sem ver o contents..possibly um DISPLAY(e / ou XAUTHORITY) questão ..
heemayl
1
@Kartagis Cron não pode lidar com segundos, também você está tentando fazer por horas, o que ainda é sintaticamente errado ..
heemayl
2
Eu amo esse método, e não o "método preguiçoso", porque eu sabia sobre o cron, mas precisava de um curso de atualização. Foi exatamente isso que fiz, muito obrigado! :)
Respostas:
A opção preguiçosa
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:
Dash> Startup Applications> Add. Adicione o comando:
Explicação
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: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.
Informação adicional; alternativamente
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):
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.
fonte
cpu 0.0%
que imposto estamos falando?Coloque no seu
crontab
.Abra sua
cron
mesa:Agora adicione:
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:Substitua
:0
pelo seu realDISPLAY
(pode ser encontradoecho $DISPLAY
na sessão interativa).Se necessário, você também pode adicionar a
XAUTHORITY
variável de ambiente:Mais uma vez, você pode encontrar o valor por
echo $XAUTHORITY
.fonte
DISPLAY
(e / ouXAUTHORITY
) questão ..