Cómo abrir automáticamente una URL a horas específicas cada día

Cómo abrir automáticamente una URL a horas específicas cada día

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.pyen la terminal para hacer ejecutable el archivo .py. Si escribo en ./openurl.pyla 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 -een 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 :0con la salida de echo $DISPLAYen una terminal gráfica.

información relacionada