Estoy usando kubuntu 14.04. Instalé cron usando sudo apt-get install cron y luego creé este archivo en IDLE, llamado openurl.py
.
#!/usr/bin/env python
import webbrowser
webbrowser.open('http://eample.com')
Luego escribí chmod +x openurl.py
en la terminal para hacer ejecutable el archivo .py. Si escribo en ./openurl.py
la terminal, el script funciona.
luego, usando el iniciador de aplicaciones inicial, hice clic en configuración del sistema > programador de tareas > nueva tarea > luego busqué el archivo openurl.py y seleccioné cuándo quería que se ejecutara.
Si escribo crontab -e
en la terminal, se muestra esto:
#openurl
21 21 * * * /home/craig/openurl.py
# File generated by KCron the Thursday 29 Jan 2015 21:20.
Y luego espero y no pasa nada. ¿Qué estoy haciendo mal?
Respuesta1
Creo que tu configuración cron es correcta. No estoy completamente familiarizado con la función python webbrower.open(), pero supongo que espera que el script de Python abra su página en una ventana visible del navegador.
Creo que lo que está sucediendo aquí es que cuando llamas al script desde la línea de comando, funciona porque se ejecuta dentro de tu sesión gráfica. Cuando se llama desde cron, se ejecuta en una nueva sesión sin conectarse a su entorno de gráficos actual, por lo que no tiene dónde iniciar el navegador. Puede verificar que el script se esté ejecutando haciendo que cree un archivo con la marca de tiempo actual o escriba la marca de tiempo actual en un registro en algún lugar.
Si su objetivo final es actualizar la página una vez al día, puede buscar un complemento del navegador para lograrlo; de lo contrario, deberá resolver el problema del entorno.
Respuesta2
El problema es que cron no sabe acerca de su sesión de inicio de sesión.
Si el script no funciona desde la consola del sistema ( ctrl-alt-f1
), definitivamente funcionará desde cron.
Si desea automatizar elementos de GUI, probablemente sea mejor utilizar un dscheduler basado en GUI en lugar de cron.
Respuesta3
Como dijo Andrew, su trabajo podría fallar porque requiere unaX sesión, ya que estás intentando abrir un navegador web. Debes colocarlo export DISPLAY=:0;
después de la programación en tu cronjob, como en
21 21 * * * export DISPLAY=:0; /home/craig/openurl.py
Si esto no funciona, puedes intentar reemplazarlo :0
con la salida de echo $DISPLAY
en una terminal gráfica.