Quiero verificar si cierto crontab funciona correctamente. He agregado un trabajo como este:
*/2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1
Sé que redirijo al dispositivo nulo, pero no estoy seguro de si el comando anterior es bueno.
* Editar 1: en mi / var / log / syslog cada dos minutos tengo el siguiente error:
(CRON) error (grandchild #2788 failed with exit status 2)
* Edición 2: no hay errores en los registros con este nuevo trabajo:
*/2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1
Respuestas:
La sintaxis para la entrada crontab parece correcta. De hecho, si edita su crontab usando "
crontab -e
" (como debería), obtendrá un error si especifica una entrada de crontab sintácticamente inválida de todos modos.En primer lugar, ¿se
/path_to_my_php_script/info.php
ejecuta correctamente desde la línea de comandos?Si es así, ¿también funciona correctamente así ?:
Si eso funciona, ¿funciona así?
El paso (3) es similar a cómo cron ejecutará su programa (como se documenta en "man 5 cron".
El problema más probable que tiene es que el cron PATH está utilizando para ejecutar su programa es demasiado restrictivo. Por lo tanto, es posible que desee agregar algo como lo siguiente a la parte superior de su entrada de crontab (deberá agregar los directorios que necesite su script):
También tenga en cuenta que cron usará de forma predeterminada
/bin/sh
, no bash. Si necesita bash, también agregue esto al inicio de su archivo crontab:Tenga en cuenta que ambos cambios afectarán a todas las entradas de crontab. Si solo desea modificar estos valores para su
info.php
programa, puede hacer algo como esto:También vale la pena mencionar que en un sistema configurado para "correo" (en otras palabras, un sistema que tiene un MTA configurado [sendmail / postfix / etc]), toda la salida de los programas crontab se le envía automáticamente por correo electrónico. Un sistema de escritorio Ubuntu predeterminado no tendrá configurado el correo local, pero si está trabajando en un servidor, simplemente puede escribir "mail" en una terminal para ver todos esos correos cron. Esto también se aplica al
at
comando " ".fuente
Aunque es muy raro, a veces cron deja de funcionar correctamente aunque el servicio se esté ejecutando. Aquí se explica cómo verificar que crond se está ejecutando y detener / iniciar el servicio.
En Linux:
En Ubuntu y otros sistemas basados en Debian:
fuente
cron
, nocrond
No redirija la salida de error a / dev / null y grep / var / log / syslog para la salida cron.
Puede mostrar inmediatamente los errores al guardar un archivo después de editarlo
/etc/crontab
o archivos dentro/etc/cron.d/
con:Si la edición está bien, solo verá el
RELOAD
aviso, se producirán errores comofuente
Puedes ver tu cron activo con el comando de terminal:
Aquí están los parámetros en orden:
min (0-59)
hora (0-23)
día del mes (1 - 31)
mes (1-12)
día de la semana (0 - 6) (domingo = 0)
mando
Entonces, estás llamando a tu script cada primer minuto de cada hora. Debe probar su salida en un intervalo más frecuente para fines de prueba:
¡Esto lo llamará cada minuto!
fuente
Para la parte de tiempo en cada línea, puede usar este probador cron para probar / verificar su definición de tiempo cron.
fuente
Creo que también puedes usar
run-parts
para ejecutar trabajos cron fuera de banda. En realidad, es lo que cron utiliza para ejecutar los trabajos cron periódicos, por lo que al proporcionar los argumentos apropiados puede ejecutarlos en cualquier momento.Si solo desea ejecutar un archivo en lugar de todos los trabajos cron definidos en, por ejemplo
/etc/cron.daily
, deberá proporcionar el argumento regex junto con una expresión regular válida.run-parts --list --regex '^p.*d$' /etc
Tenga en cuenta que los trabajos cron generalmente se nombran sin una extensión y se marcan como ejecutables, así que asegúrese de que sus scripts sean similares, aunque el uso de una expresión regular puede permitirle activar un script con una extensión.
fuente
ah !!
Obtuve la respuesta, lo comprobé y no encontré
crond
dentro del directorio de instalación predeterminado, es decir/etc/init.d/
Ahora intentaremos responder.
Nota - comprobé el
cron.allow
,cron.deny
también. Todo está bien hasta ahora.fuente