2009-04-03 7 views
5

Esto es lo que mi archivo crontab se parece a:¡Enloqueciendo con la ejecución del script de python a través de crontab en debian!

* * * * * root /usr/bin/python /root/test.py >> /root/classwatch.log 2>&1 

Esto es lo que se ve mi script en Python como:

#!/usr/bin/python 
print "hello" 

La tarea programada crea el archivo de registro. Pero está vacío. También estoy bastante seguro de que el archivo python no se está ejecutando.

¡Agradecemos cualquier ayuda! He estado jugando con él durante las últimas 4 horas sin suerte.

+0

0 1 * * */home/me/myscript aparece como una entrada de crontab válida – ojblass

+0

¿Puede darnos la salida de "de dónde raíz", "qué raíz" y "buscar/-nombre raíz 2>/dev /nulo"? Debian no permite que se especifique un usuario en crontab, por lo que debemos suponer que root es un comando al que se llama (ver mi respuesta). – paxdiablo

+0

Tendrá que abandonar la sección de usuario. Más bien su -, edite el crontab como raíz, omitiendo el nombre de usuario y se ejecutará bajo ese usuario. –

Respuesta

1

Actualizado ...

reemplazar el contenido con

* * * * * date >> /tmp/foo 

¿Esto link ayuda?

Elimina el archivo que se supone que debe crear. ¿Vuelve? Pensé que cada usuario tenía su propio archivo crontab para que el usuario en la línea sospechase.
¿Alguien te juega una broma y reemplaza el binario de python sin una operación?

Tengo que pensar que cron no está funcionando bien ya que el eco no funciona. ¿Se aseguró de cambiar el directorio de salida a/tmp con el eco?

¿Puedes hacer un od (octal dump) del archivo y ver si tal vez pones un carácter de control o una pestaña en el archivo cron?

+0

1. Las cosas de la estrella son bastante estándar. Todas las estrellas significan ejecutar cada minuto. 3. Porque el script más grande está en python. El contenido del script python aquí es solo para abstracción. 4. Intenté eso. Sin suerte. Entonces, el problema es con el cron si el archivo de registro ni siquiera muestra el "hi" del eco –

0

¿Ha intentado poner el script en otro lugar (por ejemplo,/usr/local/bin /)?

+0

. Creo que el problema puede ser con el comando cron en sí mismo porque incluso un simple "echo hi" no se está grabando en el archivo de registro . –

0

Esto funciona bien para mí en mi caja RHES 4 Linux exactamente como se muestra (NOTA: eliminé el nombre de usuario 'raíz' en el crontab).

Sospecho que hay algún problema con la forma en que está instalando su tarea cron, o la configuración de cron en su sistema. ¿Cómo estás instalando esto? ¿Estás usando crontab -e o algún otro método? ¿Eres capaz de ejecutar cualquier otra tarea cron para la raíz con éxito?

+0

buen punto acerca de como root ... – ojblass

0

Puede deberse a que un trabajo declarado anteriormente falló debido a un error de sintaxis. ¿Puedes pegar todo tu crontab? Tu línea se ve bien por lo que puedo ver.

0

La entrada crontab es correcta si está editando/etc/crontab - sin embargo, si estás usando el crontab del usuario normal (es decir crontab -e, crontabfle crontab, etc) la entrada raíz es sintácticamente incorrecta.

0

Trate simplemente enviar la salida estándar al archivo de registro, en lugar de tanto stderr y fuerte:
/usr/bin/python /root/test.py> /root/classwatch.log

4

Hay dos maneras de crear un crontab - por usuario o globalmente. Para el crontab mundial (/ etc/crontab) que especifique el usuario, de acuerdo con:

# m h dom mon dow user command 
17 * * * * root  cd/&& run-parts --report /etc/cron.hourly 

para el usuario crontabs no lo hace, según:

[email protected]:~$ crontab -l 
0 * * * * /home/aj/bin/update-foobar 

Para obtener una secuencia de comandos Python corriendo a través #!notación, que acaba de hacer el script ejecutable (chmod 755 /root/test.py), e invocar directamente, algo así como:

/root/test.py 

Si no quieres hacer eso, se puede ejecutar a través de la Python intérprete con la mano, como:

/usr/bin/python /root/test.py 

Esto supone que sea el usuario que se está ejecutando como (es decir, el usuario en/etc/crontab, o el usuario que está ejecutando crontab -e como) tiene permiso para ver el secuencia de comandos python -/raíz podría ser inaccesible para los usuarios regulares, por ejemplo.

Usted puede obtener una buena idea de si el guión está siendo ejecutado en absoluto añadiendo:

import time 
time.sleep(20) # pause for 20 seconds 

y luego consultar con "alto" o "ps aux" o "pstree" para ver si pitón de realidad corriendo.

1
chmod 755 /root/test.py 

y luego

* * * * * /root/test.py >> /root/classwatch.log 2>&1 

debería funcionar.

Cuestiones relacionadas