script para examples ejemplos ejecutar desde consola comandos archivo python cron

para - ejemplos de python en arcgis



Programador cron de la secuencia de comandos python utilizando notificar-enviar (2)

Cambie su entrada de cron a * * * * * / usr / bin / python /path/to/python/email/program.py >> /var/log/program.log 2> & 1 y vea lo que obtiene en el programa de archivo de registro .log Puede agregar instrucciones de impresión a su programa para depurar mejor (ya que las obtendrá en program.log)

Estoy teniendo algunas dificultades para usar estas tres tecnologías juntas.

Entrada de Cron:

* * * * * /usr/bin/python /path/to/python/email/program.py

Programa de Python:

1 #!/usr/bin/python 2 3 import imaplib 4 import os 5 import sys 6 import pynotify 7 8 if not pynotify.init(''Emails''): 9 sys.exit(1) 10 11 with open(''/path/to/python/email/count.tmp'', ''r'') as file: 12 data = int(file.read().strip()) 13 client = imaplib.IMAP4_SSL(''mail.sever.com'', ''993'') 14 client.login(''[email protected]'', ''password'') 15 client.select() 16 17 unseen = client.search(None, ''UnSeen'')[1][0].split() 18 19 if unseen[0] == '''': 20 pass 21 else: 22 if len(unseen) != data: 23 n = pynotify.Notification(str(len(unseen) - data) + " New Messages", 24 str(len(unseen)) + " Unread Messages", 25 "file:///path/to/python/email/mail.png") 26 if not n.show(): 27 print "Fail" 28 sys.exit(1) 30 with open(''/path/to/python/email/count.tmp'', ''w'') as file: 31 file.write(str(len(unseen)))

La secuencia de comandos funciona correctamente cuando se ejecuta por sí mismo, pero no se ejecutará cuando se programe como una tarea de cron. Revisé el syslog y dice que el script se está ejecutando, y he corrido como sudo la línea del registro para verificar.

He comprobado

Ejecutar Python Script en Crontab

y

Cron con notify-send

pero ninguno de los dos enlaces parece abordar esta combinación.

¿Alguna idea?

-Update 1-

Como pynotify parece no permitir que el programa funcione en absoluto, he reemplazado sus llamadas con una llamada al sistema os. Al menos esto actualiza el pequeño archivo tmp, pero todavía no notifica.

os.system(''/usr/bin/X11/notify-send "{} New Messages" "{} Unread Messages"''.format(len(unseen) - data, len(unseen))

-Actualizar 2-

/usr/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:57: GtkWarning: could not open display warnings.warn(str(e), _gtk.Warning) ** (other.py:16509): WARNING **: Command line `dbus-launch --autolaunch=91bdcc4a583bfb56734fbe1200000010 --binary-syntax --close-stderr'' exited with non-zero exit status 1: Autolaunch error: X11 initialization failed./n


Cuando ejecuta su programa manualmente, funciona porque la variable DISPLAY se está configurando en su visualización actual ( :0 en la mayoría de los casos), sin embargo, cuando se ejecuta el script a través de cron, no se establece dicha variable y las notificaciones no funcionan.

Como se menciona en esta respuesta , debe exportar tanto la pantalla como la Xauthority, y finalmente ejecutar el script como su usuario (y no como root).

Pruebe algo como esto:

* * * * * export DISPLAY=:0.0 && export XAUTHORITY=/home/<username>/.Xauthority && sudo -u <username> /usr/bin/python /path/to/python/email/program.py

(cambie <username> con su nombre de usuario)