Entorno de ejecución de un cron job

Generalidades

El cron daemon fue diseñado de tal manera que NO ejecuta comandos dentro de tu entorno de shell normal. Esto significa que no puedes usar comandos desnudos en cron de la misma manera que lo harías desde la línea de comandos del shell SSH. Esto se debe a que la variable de RUTA de entorno es /usr/bin:/bin, y la variable de entorno SHELL se establece en /bin/sh.

Ejemplos

Este es un ejemplo usando el comando wp.

* * * * * wp plugin update --all --path=example.com

El cron daemon no sabe dónde se encuentra el comando wp. Debes especificar la ruta completa a todos los comandos que no están en la RUTA predeterminada y siempre especificar la ruta completa para los archivos. Por ejemplo:

* * * * * /usr/bin/wp plugin update --all --path=example.com

Si tienes problemas para localizar dónde está un comando, puedes usar el siguiente comando:

[server]$ which command-name

Ejemplo:

[server]$ which wp

Lo siguiente se imprime en tu terminal:

/usr/bin/wp

Usar sudo y cron con un usuario administrador en un Servidor Dedicado

Si estás en un Servidor Dedicado y tienes un usuario administrador, no uses sudo en tu crontab. En lugar de que tu script funcione, recibirás un error como este.

[server]$ sudo: no tty present and no askpass program specified

Esto se debe a que 'sudo' requiere que se ingrese una contraseña para ejecutar y los cron job (junto con cualquier programa/comando/script que pueda ejecutar desde ellos) no permiten que se especifique ninguna entrada.

Si necesitas permisos de nivel root para un script, deberás crear un archivo en formato crontab en el directorio /etc/cron.d/. Por supuesto, asegúrate de guardar una copia de seguridad de ese archivo ya que esa ubicación está fuera del directorio /home y no está incluida en las copias de seguridad internas de DreamHost.

Requisito variable MAILTO

Por razones de rendimiento, DreamHost ahora requiere que todos los crontabs tengan un conjunto de variables MAILTO.

La variable MAILTO se puede establecer en cualquier cosa. Si lo dejas en blanco, no envía por correo la salida de tus cronjobs. Puedes configurarlo con tu nombre de usuario para que se lo entregue a tu usuario como de costumbre, o puedes especificar una dirección de correo externa. Ten en cuenta que si especificas una dirección de correo externa, los correos cron que se envían (incluidos los mensajes de notificación de finalización /error) tienen en cuenta la cuota de envío de correo por hora de tu usuario shell. Para obtener más información sobre ese límite, consulta el artículo cuota SMTP.

Si tu cron job no crea ningún resultado en la línea de comando, no se envía ningún correo, incluso si el cron job está configurado para enviar correo.

Ejemplos de una configuración MAILTO válida en un archivo crontab

Para deshabilitar el envío de salida cronjob por correo:

MAILTO=""

Para enviar la salida de cronjob a someuser@example.com:

MAILTO=someuser@example.com

Para enviar la salida de cronjob a la carpeta Maildir de tu usuario de shell:

MAILTO=username

Como se indicó al ejecutar man 5 crontab, las cadenas no se analizan para sustituciones ambientales o reemplazo de variables. Esto significa que MAILTO=$LOGNAME no funciona.

Límite de caracteres de cron job

Al agregar/modificar un cron job en el panel, el campo 'Comando para ejecutar' especifica un máximo de 1000 caracteres. Este límite no incluye el contenido adicional que DreamHost agrega al cron job (como el bloqueo o la encapsulación sh -c $ ’’). En promedio, ese contenido adicional no debe tener más de 100 caracteres. La violación del límite da como resultado esta advertencia:

/bin/sh: -c: line 1: unexpected EOF while looking for matching `''
/bin/sh: -c: line 2: syntax error: unexpected end of file

Si ves este error, se recomienda encapsular tus comandos en un script y modificar el cron job para ejecutar el script. Por ejemplo, si colocas el comando (o comandos) que contienen más de 1000 caracteres en un archivo llamado cron.sh y colocas ese archivo en el directorio principal de tu usuario, puedes configurar el comando de cron job de la siguiente manera.

[server]$ . ~/cron.sh

Ver también

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?