Cron job: ¿cómo ejecutar un script que requiere abrir la pantalla?

Quiero configurar un trabajo cron para ejecutar un script de python, pero me da este error:

RuntimeError: could not open display 

Esto se debe a que importo un módulo que requiere que abra la pantalla (por ejemplo, pylab ). Aunque mi script no genera ninguna imagen para mostrar en el monitor.

¿Hay alguna manera de dejar que crontab ejecute mis trabajos con la pantalla abierta (como si fuera ssh -X en una máquina)? Realmente no necesito generar gráficos para el monitor. Solo necesito importar mis módulos correctamente.

Necesitará un DISPLAY y XAUTHORITY válidos para usar X-Programms en Cron!

Para configurar DISPLAY es muy fácil, escriba Bash:

 export DISPLAY=":0.0" 

Para obtener un XAUTHORITY válido debes buscarlo. Debian / Gnome / gdm3 se guardan en var / run / gdm3 / * database. Usé el siguiente script:

 export DISPLAY=":0.0" [ -z $USER ] && USER=$( who | awk '{ print $1 }' | sort | uniq >/tmp/test ) for I in /var/run/gdm3/*; do AUTHUSER="`echo $I | awk -F '-' '{ print $3 }'`" for J in $USER; do [ "${AUTHUSER}" = "${J}" ] || continue USER="$J" export XAUTHORITY="${I}/database" && break done done sudo -u ${USER} /Path/to/xProgramm 

El USUARIO var $ puede estar vacío, de lo que el script busca un usuario válido, de lo contrario puede decirle al var el script!

También puede ejecutar su aplicación en un framebuffer usando xvfb o una herramienta similar:

Descargar o sudo apt-get install xvfb

Uso:

 xvfb :1 -screen 0 800x600x8 & # WIDTHxHEIGHTxCOLORDEPTH export DISPLAY=":1" java application_name.jar 

o más corto:

 xvfb-run -a -e /tmp/some/log/file.log /home/user/application.run 

-a elige un número de pantalla automáticamente, -e file especifica un archivo de registro para los mensajes de error.