2012-01-04 234 views
51

Estoy tratando de ejecutar un script de python usando el crontab de Linux, pero encontré muchas soluciones y ninguna de ellas funciona. Por ejemplo: edite el anacron en /etc/cron.d o use crontab -e.Ejecutar script de Python en Crontab

Quiero ejecutar este script cada 10 minutos.

¿Qué archivo debo editar para configurar esto?

Gracias de antemano

EDITAR

puse esta línea al final del archivo, pero no cambia nada. ¿Tengo que reiniciar algún servicio?

*/2 * * * * /usr/bin/python /home/souza/Documets/Listener/listener.py 

EDITAR [2]

Guys, he seguido el código fuente. Hay tal vez un problema aquí, pero cuando yo haga de forma manual, funciona:

http://pastebin.com/qsWHNzqT

+0

Cuando dice "no cambia nada". ¿Muestra un error? ¿No se ejecuta? ¿Cuál es el comportamiento? –

+0

es "Documets" en lugar de "Documentos" intencional? –

+0

Simplemente no ocurre nada. :( – guisantogui

Respuesta

91

Sólo tiene que usar crontab -e y seguir el tutorial aquí:

http://adminschoice.com/crontab-quick-reference

mirada en el punto 3 para una guía sobre cómo especificar la frecuencia.

Sobre la base de sus necesidades, debe ser efectiva:

*/10 * * * * /usr/bin/python script.py 
+1

sigo este tutorial, pero cuando guardo el archivo aparece un mensaje: "/tmp/crontab.JTQ0My/crontab":22: errores de minuto malo errores en el archivo crontab, no se puede instalar. ¿Desea volver a intentar la misma edición? (y/n) " si escribo" y ", he vuelto a editar archivos. Y si escribo" n ", el archivo no se guarda. Agrego esta línea en la última línea del archivo: "/1 * * * */usr/bin/python script.py " – guisantogui

+0

@guisantogui hay un punto en el tutorial que explica que el uso de"/1 "podría no ser compatible con todos los sistemas operativos. ¿Con qué sistema operativo está ejecutando esto? en? –

+3

@guisantogui acaba de notar que falta un "*" antes del "/" –

46

Deja tus secuencias de comandos en un archivo foo.py comenzando con

#!/usr/bin/python 

a continuación, dar permiso de ejecución a la secuencia de comandos con

chmod a+x foo.py 

y utilice la ruta completa de su foo.py fil e en su crontab.

Véase la documentación de execve(2) que está manejando la shebang

+0

es #!/Bin/sh bueno para scripts de shell? – Tomer

7

Como se ha mencionado no cambia nada,

primer lugar, debe redirigir la entrada estándar y stderr tanto de la ejecución crontab, como a continuación:

*/2 * * * * /usr/bin/python /home/souza/Documets/Listener/listener.py > /tmp/listener.log 2>&1 

luego puede ver el archivo /tmp/listener.log para ver si el script se ejecutó como esperaba.

En segundo lugar, adivina lo que quiere decir cambio nada es mediante la observación de los archivos creados por el programa:

f = file('counter', 'r+w') 
json_file = file('json_file_create_server.json','r+w') 

el trabajo crontab anterior no creará estos archivos en el directorio /home/souza/Documets/Listener, como el trabajo de cron es no ejecutado en este directorio, y utiliza la ruta relativa en el programa. Así que para crear estos archivos en el directorio /home/souza/Documets/Listener, la siguiente tarea cron hará el truco:

*/2 * * * * cd /home/souza/Documets/Listener && /usr/bin/python listener.py > /tmp/listener.log 2>&1 

Cambie al directorio de trabajo y ejecutar la secuencia de comandos desde allí, a continuación, puede ver los archivos creados en su lugar.

+0

¿Qué significa 2> & 1? –

Cuestiones relacionadas