Entorno de ejecución de un trabajo cron

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 su 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 trabajos cron (junto con cualquier programa/comando/script que pueda ejecutar desde ellos) no permiten que se especifique ninguna entrada.

Si necesita permisos de nivel raíz para un script, deberá crear un archivo en formato crontab en el directorio /etc/cron.d/. Por supuesto, asegúrese de mantener 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 electrónico 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 electrónico externa. Ten en cuenta que si especificas una dirección de correo electrónico externa, los correos electrónicos 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 electrónico por hora de tu usuario shell. Para obtener más información sobre ese límite, consulte el artículo cuota SMTP.

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

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

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

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 su usuario de shell:

MAILTO=youruser

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 trabajo Cron

Al agregar/modificar un trabajo cron 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 trabajo cron (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 encuentras este error, se recomienda encapsular tus comandos en un script y modificar el trabajo cron 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 de inicio de tu usuario, puedes configurar el comando de trabajo cron de la siguiente manera.

[server]$ . ~/cron.sh

Asegúrate de revisar la sección del entorno de ejecución anterior para asegurarte de tener en cuenta las variables, rutas y/o declaraciones faltantes.

Ver también

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?