Eu uso este script para reiniciar o Firefox durante a noite (para aplicar o gerenciador de pacotes e as atualizações do complemento):
#!/bin/bash
killall -s SIGTERM firefox; sleep 15
firefox -P "user" &
firefox -P "default settings" &
crontab (executado às 3 da manhã):
0 3 * * * /usr/local/bin/firefox.sh
Quando executado manualmente o script funciona como esperado: fecha os processos do Firefox e inicia dois perfis em suas próprias janelas.
Quando o cron executa o script, o Firefox é fechado apenas de forma consistente.
cron
os trabalhos são executados em um ambiente completamente separado, isolado de sua área de trabalho GUI ou ambiente de terminal usual.firefox
espera ser executado como um processo filho de seu ambiente de desktop ou, no mínimo, ter umDISPLAY
conjunto de variáveis válido.Às vezes, é possível obter tarefas cron para iniciar ou interagir com programas GUI. Tente adicionar
export DISPLAY=:0.0
como a segunda linha do seu script. Se:0.0
não funcionar, execute um terminal em sua área de trabalho e executeecho $DISPLAY
para obter o valor correto.Se isso ainda não funcionar, você também pode precisar definir
XAUTHORITY=$HOME/.Xauthority
ou talvez usarxauth
para habilitar o acesso.Observe que qualquer programa iniciado a partir do cron (incluindo o firefox) herdará o ambiente bastante minimalista do cron. Variáveis como PATH, LOGNAME e/ou USER podem ser diferentes do que você espera, e muitas variáveis não serão definidas. por exemplo, as variáveis de localidade LC_* podem não ser definidas (dependendo da distro - por exemplo, cron nas leituras do Debian
/etc/environment
e/etc/default/locale
. Eu não sei se esse também é o caso no Fedora ou não). Se esse programa precisar de variáveis de ambiente específicas definidas para determinados valores, você precisará defini-las em seu arquivo crontab ouexport
em seu script também. Ou apenassource
seus arquivos usuais de inicialização do shell do script.Firefox, Chromium e outros navegadores da Web podem precisar
http_proxy
de ,https_proxy
e outras variáveis relacionadas ao proxy definidas.Para sua informação, é mais ou menos assim que a execução de programas GUI
ssh -X
funciona. A-X
opção habilita o encaminhamento X11. Ele configura um túnel para o protocolo proxy X na conexão ssh e configura a variável DISPLAY para apontar para esse túnel.Eu uso isso para, por exemplo, rodar
xsane
no meu servidor (hostname "ganesh", que tem uma impressora/scanner HP3030 conectada), mas ter as janelas exibidas no monitor da minha estação de trabalho - ou seja,ssh -X ganesh xsane
.Se eu fosse executar
ssh -X ganesh 'echo $DISPLAY'
(precisa estar entre aspas simples ou com escape para que meu shell local não interpole a variável), veria algo como: