Problema frustrante donde ni cron ni su -c ejecuta mi trabajo (¿permissions?)

Actualizado (y cortado ) con más detalles a continuación.

Configuré un script cron e bash depurar por qué no se está ejecutando. [Recortada la testing de context, que está todo bien; ver la revisión 2 para más detalles] El command en sí, en caso de que ayude, (las flechas indican el ajuste de línea para la legibilidad) es:

/usr/bin/php -C /etc /path/to/process.php ↪ >>/path/to/stdout.log 2>>/path/to/stderr.log 

[Prueba de permissions recortados, que está todo bien; ver a continuación y revisión 2 para más detalles]

Comprobando crontab (de nuevo, envuelto para la legibilidad), obtengo:

 [blackero@XXXXXXXXXXX to]$ sudo crontab -u cronuser -l MAIL="blackero@localhost" 30 9 * * * cronuser /usr/bin/php -C /etc /path/to/process.php ↪ >>/path/to/stdout.log 2>>/path/to/stderr.log 20 18 7 * * cronuser /usr/bin/php -C /etc /path/to/process.php ↪ >>/path/to/stdout.log 2>>/path/to/stderr.log 22 18 7 * * cronuser echo "Test" > /path/to/test.txt ↪ 2> /path/to/error.txt 

Actualización n. ° 1 en 2012-02-08 12:32 Z

[Snip: Habiendo probado la sugerencia de derobert ( revisión 3 )] , sé que el cronuser puede ejecutar el script correctamente y puede escribir en los dos files .log . (Una de las primeras cosas que hace el script process.php es download un file por FTP; también lo está haciendo con éxito). Pero, incluso después de corregir la línea MAIL="" (tanto quitándola como cambiándola a MAILTO="blackero@localhost" ), la tarea cron aún no se ejecuta, ni me envía ningún correo electrónico.

Un amigo me sugirió que vuelva a intentar

  9 12 8 * * cronuser /bin/echo "Test" > /var/www/eDialog/test.txt ↪ 2> /var/www/eDialog/error.txt 

tarea, después de pasar la ruta completa a /bin/echo . Habiendo probado eso, tampoco funcionó y tampoco generó ningún correo electrónico, así que estoy perdido.

Actualización # 2 en 2012-02-08 19:15 Z

Una conversación de chat muy útil con oHessling , parece que el problema es con pam . Por cada vez que cron ha intentado ejecutar mi trabajo, tengo inputs /var/log/cron :

 crond[29522]: Authentication service cannot retrieve authentication info crond[29522]: CRON (cronuser) ERROR: failed to open PAM security session: Success crond[29522]: CRON (cronuser) ERROR: cannot set security context 

Lo arreglé añadiendo la siguiente línea a /etc/shadow :

 cronuser:*:15217:0:99999:7::: 

Como encontré en un foro , si el usuario no aparece en /etc/shadow , entonces pam no continuará procesando la request de security. Agregar * como segunda columna significa que este usuario no puede iniciar session con una contraseña (ya que no se especifica ningún hash). La reparación que dio lugar a un error diferente en /var/log/cron , por lo que, al verificar dos veces mi crontab , noté que había especificado el nombre de usuario cada vez.

Corregir eso significa que mi crontab ahora dice:

 [blackero@XXXXXXXXXXX ~]$ sudo crontab -u cronuser -l MAILTO="blackero@localhost" 30 9 * * * /usr/bin/php -C /etc /path/to/process.php ↪ >>/path/to/stdout.log 2>>/path/to/stderr.log 52 18 8 * * /usr/bin/php -C /etc /path/to/process.php ↪ >>/path/to/stdout.log 2>>/path/to/stderr.log 9 12 8 * * /bin/echo "Test" > /path/to/test.txt ↪ 2> /path/to/error.txt 

pero ahora /var/log/cron me muestra:

 Feb 8 18:52:01 XXXXXXXXXXX crond[16279]: (cronuser) CMD (/usr/bin/php -C /etc ↪ /path/to/process.php >>/path/to/stdout.log 2>>/path/to/stderr.log) 

y nada entra en stdout.log o stderr.log . No se me envió ningún correo y ninguno de los otros files en /var/log/ tiene ninguna input en el marco de time correcto, y me estoy quedando sin ideas sobre dónde search para ver qué está yendo mal

En primer lugar, cuando falla un trabajo cron, cron envía un correo electrónico. De manera pnetworkingeterminada, eso es para el propietario del trabajo cron. Entonces esos correos electrónicos probablemente van a cronuser @ localhost o tal vez a root @ localhost. Verifique esos correos electrónicos. Alternativamente, puede especificar a dónde debe ir el correo colocando MAILTO=email@domain en la parte superior del file crontab. (En realidad, veo que pones MAIL="" en la parte superior de tu crontab. Al less, de acuerdo con man 5 crontab en mi máquina, debería ser MAILTO . Y no quieres descartar los posts de error cuando intentas descubrir por qué no está funcionando!)

En segundo lugar, cron usa /bin/sh . Establezca SHELL=/bin/bash (nuevamente, en la parte superior del crontab) si necesita extensiones de bash.

En tercer lugar, no ha probado completamente los permissions. Necesitas hacer algo como:

 # su -s /bin/sh -u cronuser $ touch /path/to/stdout.log $ touch /path/to/stderr.log $ cat /path/to/process.php > /dev/null $ exit 

para verificar completamente los permissions. cronuser podría faltar + x en un directory principal, por ejemplo. (Supongo que también deberías verificar / usr / bin / php, pero supongo que es sensato)

También puede intentar ejecutar el command en un entorno mínimo:

 # su -s /bin/sh -u cronuser $ env - /bin/sh $ /usr/bin/php -C /etc /path/to/process.php 

para ver si eso funciona

¿está corriendo crond ?

Pruebe uno de estos commands:

 pidof crond pgrep -l crond ps caxf | grep -6 crond --color 

salida del último command:

 11881 ? S 0:00 \_ httpd 11882 ? S 0:00 \_ httpd 11883 ? S 0:00 \_ httpd 11884 ? S 0:00 \_ httpd 11885 ? S 0:00 \_ httpd 11886 ? S 0:00 \_ httpd 2098 ? Ss 0:01 crond #this 'crond' is in networking 2125 ? Ss 0:00 sudoscriptd 2127 ? Ss 0:00 \_ sudoscriptd 2136 tty2 Ss+ 0:00 mingetty 2137 tty3 Ss+ 0:00 mingetty 2138 tty4 Ss+ 0:00 mingetty 2139 tty5 Ss+ 0:00 mingetty 

¿Cuál es la configuration crond ?

Verifique su /etc/rc.d/init.d o /etc/init.d o cualquier file de inicio.

La configuration crond puede listr los usuarios denegados y / o permitidos .
¿Tu usuario está denegado ? Verifique estos files:

  /etc/cron.allow /etc/cron.deny 

Si ambos files están ausentes, solo se permite root.
Si cron.allow está ausente y cron.deny está vacío, todos los usuarios están permitidos por defecto.

El file /etc/crontab debe poder escribirse solo para la raíz:

 $ ls -l /etc/crontab -rw-r--r-- 1 root root 255 Jul 15 2006 /etc/crontab 

¿Qué dice crond ?

La forma natural de recibir información de crond es el correo local. crond generalmente usa sendmail . Si sendmail no está disponible, es posible dar otro command de correo ( CRONDARGS="-mmail" ).

Pero en esta etapa, lo mejor es verificar directamente los loggings crond ( ll /var/log/cron* ).

Reiniciar crond

El problema puede crond repetir crond

Si el problema init.d , antes de realizar otro reinicio, init.d sin init.d o service , e intente con otras opciones:

sudo crond -p -x sch

Y revisa nuevamente los files de logging crond

He encontrado el problema. El cambio de línea de command -C que estoy enviando a php , que debería haber sido -c . No tengo idea de por qué cron no me lo estaba informando de ninguna manera, y mucho less de manera útil (o cómo de alguna manera logré crontab en el crontab con una C mayúscula pero probarlo en la CLI con una minúscula), pero ejecutarlo una vez más en el CLI con un colega aquí actuando como mi mono y de repente fue obvio.

¿Ahora qué estúpido me siento?

Bueno, al less está resuelto ahora y cron está felizmente ejecutando mi maldito script. Gracias a todos por toda su ayuda.