Estou usando o Kubuntu 14.04. Instalei o cron usando sudo apt-get install cron e criei este arquivo no IDLE, chamado openurl.py
.
#!/usr/bin/env python
import webbrowser
webbrowser.open('http://eample.com')
Em seguida, digitei chmod +x openurl.py
no terminal para tornar o arquivo .py executável. Se eu digitar ./openurl.py
no terminal, o script funciona.
em seguida, usando o inicializador de aplicativos inicial, cliquei em configurações do sistema > agendador de tarefas > nova tarefa > procurei o arquivo openurl.py e selecionei quando queria que ele fosse executado.
Se eu digitar crontab -e
no terminal, isso será exibido:
#openurl
21 21 * * * /home/craig/openurl.py
# File generated by KCron the Thursday 29 Jan 2015 21:20.
E então eu espero e nada acontece. O que estou fazendo de errado?
Responder1
Acho que sua configuração do cron está correta. Não estou completamente familiarizado com a função python webbrower.open(), mas presumo que você espera que o script python abra sua página em uma janela visível do navegador.
Acho que o que está acontecendo aqui é que quando você chama o script na linha de comando, ele funciona porque está sendo executado na sua sessão gráfica. Quando é chamado a partir do cron, ele é executado em uma nova sessão sem os ganchos do ambiente gráfico atual, portanto, não há onde iniciar o navegador. Você pode verificar se o script está sendo executado criando um arquivo com o carimbo de data/hora atual ou gravando o carimbo de data/hora atual em um log em algum lugar.
Se o seu objetivo final é atualizar a página uma vez por dia, você pode procurar um plug-in do navegador para conseguir isso, caso contrário, você precisará descobrir o problema do ambiente.
Responder2
O problema é que o cron não sabe sobre sua sessão de login.
Se o script não funcionar no console do sistema ( ctrl-alt-f1
), ele definitivamente não funcionará no cron.
Se você deseja automatizar coisas da GUI, provavelmente é melhor usar um dscheduler baseado em GUI em vez do cron.
Responder3
Como Andrew disse, seu trabalho pode falhar porque exige umSessão X, já que você está tentando abrir um navegador da web. Você deve colocar export DISPLAY=:0;
após o agendamento no seu cronjob, como em
21 21 * * * export DISPLAY=:0; /home/craig/openurl.py
Se isso não funcionar, você pode tentar substituir :0
pela saída de echo $DISPLAY
um terminal gráfico.