Capítulo 15 · 15.1
Trabajo Cron: ejecutar tareas automáticamente
Véalo en un vídeo breve
Un trabajo cron (o cronjob) es una orden que el servidor ejecuta por usted en momentos fijos. Por ejemplo, cada noche un script que elimina datos antiguos, cada hora un enlace con su contabilidad, o las tareas programadas de WordPress o Laravel. Esto se configura en Trabajo Cron, dentro de Funciones Avanzadas.

Normas en WebOké
Un servidor se comparte con otros sitios web. Por eso existen normas para los trabajos cron:
- Deje que una tarea se ejecute como máximo una vez cada 10 minutos. Esto se lo pedimos a todos los usuarios. El servidor no lo impone, pero una tarea que se ejecuta con más frecuencia ralentiza el servidor para usted y para los demás. Si tiene varias tareas, evite que se inicien todas al mismo tiempo.
- Mantenga una tarea breve. Si debe realizarse mucho trabajo, repártalo en varias rondas.
Crear una tarea
- En DirectAdmin, haga clic en Trabajo Cron dentro de Funciones Avanzadas.
- Haga clic en CREAR TRABAJO DE CRON.
- Rellene en Minuto, Hora, Día del mes, Mes y Día de la Semana cuándo debe ejecutarse la tarea (1). Un asterisco * significa "cada".
- Debajo de los campos de hora verá en Trabajo Cron se ejecutará: (2) en lenguaje sencillo cuándo se ejecuta la tarea. Compruébelo.
- En Opdracht (3) escriba lo que debe ocurrir, con rutas completas (véase más abajo).
- ¿No desea recibir un correo cada vez? Haga clic en EVITAR E-MAILS (4).
- Haga clic en CREAR (5).

Después, la tarea aparecerá en la lista. Si desea eliminarla, márquela (1) y haga clic en Eliminar.

Ejemplos de horarios
| Minuto | Hora | Día del mes | Mes | Día de la Semana | Significado |
|---|---|---|---|---|---|
| 30 | 3 | * | * | * | Cada día a las 03:30 |
| */10 | * | * | * | * | Cada 10 minutos |
| 0 | * | * | * | * | Cada hora en punto |
| 15 | 8 | * | * | 1-5 | Los días laborables a las 08:15 (1 es lunes, 0 o 7 es domingo) |
| 0 | 2 | 1 | * | * | El primer día de cada mes a las 02:00 |
Puede separar valores con comas (1,15,30), indicar un intervalo con un guion (5-7) y un paso con */ (*/2 es cada dos). Elija preferiblemente un momento tranquilo y aleatorio, como las 03:17 en lugar de exactamente medianoche.
La orden: rutas completas
Un trabajo cron no sabe en qué carpeta debe empezar. Por eso, utilice siempre rutas completas. Su paquete se encuentra en el servidor en /home/ seguido de su nombre de usuario de DA (véase Encontrar el nombre de su servidor y su nombre de usuario de DA).
Iniciar un script de PHP:
/usr/local/bin/php /home/nombredeusuario/domains/sudominio.nl/public_html/tarea.php
Esto utiliza la misma versión de PHP que su sitio web, es decir, la versión indicada en Select PHP version (véase Elegir la versión de PHP (Select PHP version)).
Llamar a una dirección web (por ejemplo, si su software proporciona una URL de cron):
curl --silent https://www.sudominio.nl/cron.php > /dev/null
WordPress: WordPress inicia sus tareas programadas de forma predeterminada cuando llega un visitante. En un sitio con mucho tráfico o con poco tráfico, es mejor hacerlo con un trabajo cron. En ese caso, añada en wp-config.php define('DISABLE_WP_CRON', true); y cree una tarea que inicie cada 15 minutos /usr/local/bin/php /home/nombredeusuario/domains/sudominio.nl/public_html/wp-cron.php.
Laravel: /usr/local/bin/php /home/nombredeusuario/domains/sudominio.nl/artisan schedule:run. Tenga en cuenta que schedule:run solo ejecuta las tareas que coinciden exactamente con el momento del cron. Si el cron se ejecuta cada 10 minutos, una tarea programada para las 08:05 nunca se ejecutará.
Correo después de cada tarea
Si una tarea genera resultado (texto o un mensaje de error), el servidor puede enviarlo por correo electrónico. Esto solo ocurre si ha configurado una dirección. Tiene tres opciones:
- Correo a una dirección propia: haga clic en ENVIAR TODOS LOS RESULTADOS DE CRON AL E-MAIL, introduzca una dirección de correo electrónico y haga clic en GUARDAR. Esto se aplica a todas sus tareas. Si deja el campo vacío, no se enviará ningún correo.
- Sin correo para una tarea: al crearla, haga clic en EVITAR E-MAILS. Entonces se añadirá >/dev/null 2>&1 al final de la orden y el resultado de esa tarea se descartará, incluso si ha configurado una dirección.
- Resultado en un archivo de registro: añada al final de la orden >> /home/nombredeusuario/cron-log.txt 2>&1. Así podrá ver más tarde en el Administrador de archivos qué hizo la tarea. Limpie este archivo de vez en cuando.

Consejo: Configure una dirección mientras esté probando una tarea nueva. Así verá de inmediato si funciona. Luego desactívela o envíe el resultado a un archivo de registro. Los correos de los trabajos cron cuentan para el límite de envío de su paquete (véase Verzendlimieten en de melding 'message limit reached').
Preguntas frecuentes
Mi tarea muestra "Could not open input file".
La ruta al script no es correcta. Compruebe la ruta completa en el Administrador de archivos: debe empezar por /home/nombredeusuario/domains/.
Mi script funciona en el navegador, pero no como trabajo cron.
Un script que se ejecuta mediante cron no sabe bajo qué sitio web se ejecuta: $_SERVER['SERVER_NAME'] y $_SERVER['DOCUMENT_ROOT'] están vacíos y las rutas relativas en include funcionan de otra manera. Utilice rutas completas en el script, o llame al script mediante curl con la dirección web.
¿Puedo ver cuándo se ha ejecutado una tarea?
DirectAdmin no registra esto por usted. Por eso, haga que la tarea escriba su resultado en un archivo de registro, con la fecha incluida (por ejemplo, date >> /home/nombredeusuario/cron-log.txt como primera orden, separada con ;).
¿Qué hace Ejecutar en @reinicio?
En ese caso, la tarea solo se ejecuta cuando el servidor se reinicia, y no en momentos fijos. Esto casi nunca es necesario en un sitio web.
