Cron: exactamente según lo previsto. Configurar el Programador de tareas – Crontab

En el sistema operativo Unix, es posible ejecutar programas de usuario en un momento especificado por el usuario. Para ello se utiliza el programa cron, que recibe instrucciones de los usuarios y, siguiéndolas, realiza cualquier tarea según los scripts recibidos. Nuestros clientes pueden utilizar esta función para realizar tareas periódicas.

Cómo configurar cron en su cuenta personal (para tarifas Unix)

Dado que no todos los programas PHP pueden ejecutarse a través de SAPI CLI sin modificaciones previas, puede ejecutarlos a través de obtener. Por ejemplo:

/usr/local/bin/wget -O /dev/null -q http://mysite.tld/cron.php?action=123

Si el script usa funciones requerir, incluir y contienen rutas relativas, luego, al comienzo del script que se está ejecutando, use una llamada de función chdir(), que establecerá el directorio de trabajo actual.

Cómo recibir mensajes de error de programas ejecutados por cron

Si encuentra errores al ejecutar un programa que se ejecuta desde cron, probablemente desee recibir mensajes de error para poder monitorear completamente el rendimiento de los trabajos que se ejecutan periódicamente. Para hacer esto, coloque la siguiente línea al comienzo del script cron:

CORREO A=direcció[email protected]

Ciertamente, direcció[email protected] debe reemplazarla con una dirección de correo electrónico real donde se entregarán las notificaciones. Si necesita recibir mensajes de error en varias direcciones, especifique todas estas direcciones separadas por comas.

Tenga en cuenta que cron enviará por correo lo que generan los scripts en ejecución. Por ejemplo, si escribe un script que imprime la línea "Hola, mundo" y lo ejecuta a través de cron, recibirá un correo electrónico con la línea "Hola, mundo" cada vez que cron ejecute dicho script.

Para evitar esto, por ejemplo, cuando no necesita el texto generado por el script, debe agregar los caracteres

> /dev/nulo 2>&1

La línea completa para cron se verá así:

0 1 * * * /usr/local/bin/php -q $HOME/script.php > /dev/null 2>&1

Recomendamos verificar la sintaxis correcta de los scripts que configuró para ejecutarse mediante cron. Los scripts pueden contener un error, pueden no funcionar igual cuando se ejecutan a través de un servidor web y a través de cron, etc. Para asegurarse de que el script funcione correctamente a través de cron, primero verifíquelo con el siguiente comando en el shell de Unix:

/usr/local/bin/php -l script.php

Si no hay errores en el script, verá el mensaje "No se detectaron errores de sintaxis en script.php".

Restricciones

Para los programas que se inician mediante cron, se aplican las mismas restricciones sobre los recursos consumidos que para los procesos iniciados por el usuario en el shell de Unix. Estamos hablando de restricciones en el tiempo de ejecución del programa, cantidad de memoria disponible, restricciones en el tamaño de los archivos, etc.

en el sistema linux El lanzamiento automático de trabajos lo realiza el demonio crond, y no solo el administrador del sistema, sino también los usuarios pueden crear programas para el lanzamiento automático de trabajos.

¿Cómo funciona crond?

El principio de funcionamiento del demonio crond es simple. Después de iniciar (normalmente cuando se inicia el sistema), el demonio se activa cada minuto y comprueba si hay algún programa programado para ejecutarse en ese minuto. Si se encuentran dichos programas, el demonio los ejecuta y envía mensajes de correo electrónico a los usuarios que programaron su ejecución.

Programación de tareas

Crear un horario no es una tarea difícil. La programación se encuentra en un archivo crontab independiente. Cada línea del archivo contiene una tarea que debe ejecutarse en un momento determinado.

Formato de archivo crontab

La parte de fecha y hora consta de cinco campos numéricos, separados por espacios, que especifican la hora a la que se ejecutará el trabajo:

Para facilitar la cumplimentación de estos campos, se han introducido las siguientes reglas:

  • Puede especificar valores como intervalos numéricos. Por ejemplo, el intervalo 1-3 en el campo de la hora significa 1:00, 2:00 y 3:00 de la medianoche, 2-4 en el campo del día de la semana: martes, miércoles o jueves.
  • Los intervalos se pueden establecer en incrementos mayores que uno. Por ejemplo, para indicar cada dos horas a partir de la medianoche, establecería el intervalo en 0-23 en incrementos de 2 separados por una barra: 0-23/2
  • Un asterisco (*) indica el rango completo de valores de campo, desde el mínimo hasta el máximo. Por ejemplo, en el campo del día del mes, el asterisco significa el intervalo 0-31, en el campo del día de la semana, 0-7
  • El día de la semana o del mes se puede indicar con las primeras tres letras de su nombre (inglés)

Ejemplos de fecha y hora

Varios ejemplos de cómo completar campos de fecha y hora:

0 1 * * * Ejecute la tarea diariamente a la 1:00 medianoche 30 14 * * 0 Ejecute la tarea los domingos a las 2:30 p. m. 0 23-7/2.8 * * * Ejecute la tarea cada 2 horas de 23:00 a 7:00 y a las 8:00 0 12 * 1 mes Ejecute el trabajo al mediodía todos los lunes de enero de cada año 0 12 2 feb * Ejecute el trabajo al mediodía del dos de febrero de cada año

Campo de comando

El campo de comando está separado de los campos de fecha y hora por uno o más espacios y se extiende hasta el final de la línea. Los comandos son procesados ​​por el shell /bin/sh.

Por ejemplo, la siguiente entrada de crontab requiere ejecutar /usr/sbin/backup a la 1:00 a. m. todos los días:

0 1 * * * /usr/sbin/copia de seguridad

Algunos comandos (como el correo) requieren entrada desde el dispositivo de entrada estándar. Esto se indica mediante un signo de porcentaje (%). El primero de estos caracteres indica el comienzo de la entrada estándar, cada carácter subsiguiente indica un cambio de línea.

Editando el archivo crontab

El archivo crontab se edita con el comando crontab -e. Son posibles dos enfoques:

  • crear un nuevo archivo con todas las entradas que deben incluirse en el archivo crontab y luego escribirlo en el disco con este nombre usando el comando crontab;
  • editando directamente el archivo usando el comando crontab -e.

Escribir desde archivo

Para escribir el contenido de un archivo crontab desde otro archivo, necesita crear ese otro archivo (en un editor de texto familiar) con todas las entradas que deberían formar el archivo crontab. Esta podría ser, por ejemplo, la siguiente entrada:

0 1 * * * /usr/sbin/copia de seguridad

Al archivo creado se le debe dar un nombre adecuado, como trabajos cron. Una vez creado el archivo especificado, su contenido debe escribirse en el archivo crontab con el comando:

~$ crontab cronjobs

El contenido del archivo cronjobs reemplazará completamente el contenido del archivo crontab del usuario. Con este método, cualquier usuario puede editar su archivo crontab. El superusuario tiene derechos especiales para editar los archivos crontab de otros usuarios. La edición del archivo de otra persona se indica con el indicador -u. Por ejemplo, por comando:

~# crontab -u oleg cronjobs

el archivo cronjobs se escribe como el archivo crontab del usuario oleg.

Editar el archivo crontab directamente

El comando crontab le permite evitar la operación de varios pasos de crear un archivo separado. Si ejecuta el comando crontab con la opción -e, puede editar el archivo crontab directamente.

De forma predeterminada, al utilizar el comando crontab con la opción -e, el archivo crontab se carga en el editor. Editor Vi- una herramienta poderosa, aunque compleja, popular entre usuarios experimentados Unix. Alguien que prefiere un editor diferente, p. Xeditar, puede establecer el valor correspondiente de la variable de entorno EDITOR:

~$ exportar EDITOR=xeditar

Después de esto, ingrese el comando

hace que el archivo crontab se abra en el editor especificado.

Así como un usuario normal puede editar su propio archivo crontab, un superusuario puede editar los archivos crontab de otros usuarios. Para hacer esto, use el comando:

~# crontab -u nombre-usuario -e

Ver el archivo crontab

Para ver el contenido del archivo crontab, ingrese el comando:

El superusuario puede ver los archivos crontab de otros usuarios:

~# crontab -u nombre de usuario -l

Eliminando el archivo crontab

Para eliminar el contenido de su archivo crontab, el usuario ingresa el comando:

El superusuario puede eliminar los archivos crontab de otros usuarios.

Cron se utiliza para automatizar la ejecución de tareas asignadas en el servidor. Se ejecuta en Linux y es excelente para ejecutar un programa o script durante un tiempo y frecuencia específicos programándolo con anticipación.

Configurar el programador de trabajos cron

Las tareas que deben ejecutarse están escritas en forma de líneas en las que es necesario indicar el período de activación y un comando que indica qué se debe ejecutar exactamente. Se asigna una línea separada para cada tarea. Por ejemplo:

30 3 * * 2 /tudirectorio/myscript.pl

En un lenguaje más comprensible para el usuario común se indica lo siguiente: Minutos/Horas/Día del Mes/Día de la Semana/Comando. Este ejemplo significa que a las 3:30 am, todos los martes, Cron debería iniciar un archivo llamado youdirectory/myscript.pl.

Si enumera los valores separados por comas, por ejemplo, en el elemento "Día" escribe 2,4,6, el archivo se iniciará a la hora especificada todos los martes, jueves y sábados.

Si especifica valores separados por un guión, la tarea se ejecutará en el intervalo de tiempo especificado. Por ejemplo, si configura 3-7 en el elemento "Reloj", el archivo se ejecutará cada hora de 3 a 7 am.

También puedes configurar la frecuencia escribiendo en la columna de tiempo, por ejemplo, en “Horas” /12. Luego la tarea se ejecutará cada 12 horas.

Es importante saber que "*" no significa que no haya ningún valor, sino que todos los valores posibles. Es decir, si configura * * * * 1 /yourdirectory/myscript.pl, deseando que el archivo se ejecute todos los lunes, esto resultará completamente incorrecto y el archivo se ejecutará cada minuto.

Otra característica importante es la necesidad de especificar una ruta absoluta al archivo. Y además el archivo debe tener tales derechos de acceso para que al menos pueda ejecutarse.

De los ejemplos presentados queda claro que este programador de tareas en Linux es una herramienta muy conveniente, por lo que le sugerimos que se familiarice con algunas de sus funciones con más detalle.

El método más sencillo y común para trabajar con Cron es a través del panel de administración del hosting. Sin embargo, la configuración de Cron ocurre de manera diferente para diferentes paneles.

A veces sucede que el hosting no brinda la posibilidad de trabajar con Cron a través del panel de administración. En tal situación, se utiliza el protocolo SSH. Al usarlo, se conecta al servidor usando el programa PuTTY e ingresa tareas en la línea de comando.

Para comenzar, ingrese el comando:

crontab –e

A continuación, accederá a vi, un editor de texto; sin embargo, estos editores pueden ser diferentes para diferentes proveedores de alojamiento. Si no está familiarizado con el trabajo en vi, puede ingresar el comando: EDITOR=ee crontab –e, que lo redirigirá a un editor más simple e intuitivo.

Si el hosting no es compatible con el editor que se abre, tendrás que descubrir cómo funciona vi:

  • para ingresar texto, debe cambiar al modo del mismo nombre presionando el botón “i”;
  • para salir del modo, utilice el botón “Esc”;
  • Para eliminar un carácter en el modo de entrada de texto, use las teclas "Esc" y luego "x";
  • para guardar y salir del archivo, presione “:wq”;
  • Asegúrese de presionar la tecla "Entrar" al final de cada línea, esto es necesario para que Cron funcione;
  • Para ver las tareas existentes en Cron, ingrese el comando crontrab -l.

Ejemplos de tareas cron en Linux

- Realizar la tarea cada 6 horas a los 30 minutos de todos los días de cada mes:

30 */6 * * * /tudirectorio/myscript.pl

— Ejecute la tarea después de cada reinicio:

@reboot/tudirectorio/myscript.pl

— Completa la tarea el día 15 de cada mes a las 00:00:00:

0 0 15 * * /tudirectorio/myscript.pl

archivos PHP

Para ejecutar scripts PHP, normalmente se utiliza un intérprete. No existen instrucciones universales para su funcionamiento, ya que los diferentes sitios de alojamiento utilizan una variedad de software. Como resultado, WGET se utiliza a menudo para ejecutar PHP en Cron. Introduzca la siguiente entrada:

1 2 * * 3 raíz wget -O - -q -t 1 http://mysite.com/file.php

Veámoslo con más detalle:

  • "-O-": evita que Cron cree archivos adicionales, eliminando así del servidor basura innecesaria, ya que el trabajo se realiza en la consola;
  • “q” - las operaciones ya no se muestran en la pantalla;
  • “t-1”: permite solo un intento de conexión.

Limitaciones de cron

Cron en sí solo tiene una limitación: el período de ejecución de la tarea. Si sobrecarga su servidor de alojamiento, puede impedir que Cron se ejecute más de una vez cada pocos minutos u horas. Además, Cron está limitado únicamente por los recursos del servidor, como RAM, volúmenes de datos, tiempo de ejecución de comandos, etc.

Si el servidor se reinicia, Cron guardará todas sus tareas y se reiniciará con él.

Informe

Cron tiene una configuración para configurar notificaciones por correo electrónico sobre su trabajo. Esto es especialmente útil si ocurre algún error durante la operación. Para habilitar dichas notificaciones por correo electrónico, debe ingresar la siguiente línea en crontab:

CORREO A= [correo electrónico protegido]

Después de MAILTO= se indica el correo requerido. Puede especificar varios de ellos a la vez, enumerándolos separados por comas. Ahora, si ocurre algún error, se le informará al respecto. Además, los resultados de los scripts también se enviarán a su correo electrónico. Sin embargo, si esta función le molesta, puede desactivarla ingresando el comando > /dev/null 2>&1 al final de la tarea.

Nuestros materiales sobre Ubuntu Server ocasionalmente abordan el tema de ejecutar ciertas tareas según un cronograma. Para no explicar siempre lo mismo, decidimos crear este material, que debería ayudar a los administradores de sistemas a dominar y utilizar eficazmente el programador de tareas en Linux.

En Ubuntu Server, se utiliza como programador de tareas. cron- programador con interfaz de línea de comando. Es una parte importante del sistema y comienza a funcionar inmediatamente después de la instalación, realizando diversas tareas del sistema. Nuestro objetivo es ponerlo a nuestro servicio, sobre todo porque no es tan difícil como parece.

Hay dos tipos de horarios. cron: usuario y sistema. Se diferencian en que el primero lo crean los usuarios y lo ejecutan teniendo en cuenta los derechos del usuario, el segundo se utiliza con fines administrativos o del sistema y puede iniciarse en nombre de cualquier usuario.

Para crear o cambiar un horario personalizado, ingrese el comando:

crontab-e

Cuando lo inicie por primera vez, la utilidad le pedirá que seleccione un editor que recomendamos elegir; medit(requiere mc instalado), u otro editor con el que sepas trabajar.

El formato de las líneas de programación es:

minuto hora día mes comando día_de_semana

  • Minuto- tiempo en minutos de 0 a 59
  • Hora- de 0 a 23
  • Día- día del mes del 1 al 31
  • Mes- del 1 al 12 o designaciones de letras enero - diciembre
  • Día de la semana- de 0 a 6 (0 - domingo) o sábado - domingo
  • Equipo- una cadena en el formato del intérprete de comandos que se ejecutará, escribiendo como equipo1 && equipo2 para ejecutar varios comandos seguidos.

Los valores de minutos, horas, días se pueden especificar de la siguiente manera:

  • Significado- un número que indica una fecha u hora, se permite un comodín * permitiendo una gama completa de valores
  • Múltiples significados- se permite especificar varios valores separados por comas, por ejemplo 2,14,22
  • Rango de valores- indicado con un guión, por ejemplo 2-10
  • paso de valores- indicado mediante una fracción cuyo denominador es un paso, por ejemplo */3 - cada tercer valor 0, 3, 6, 9, etc. El numerador debe ser un rango de valores o un asterisco.

Considere la siguiente entrada de ejemplo:

0 8-19/2 * * 1 /home/ivanov/prueba

Significa que cada dos horas de 8 a 19 (8, 10,12,14,16) los lunes, ejecute el script de prueba en el directorio de inicio de Ivanov.

Nos gustaría advertirle inmediatamente contra un error común: al indicar la ejecución periódica, todas las fechas deben indicarse explícitamente, el asterisco indica el rango completo de valores y no su ausencia. Por ejemplo, si necesita ejecutar un determinado script cada hora de 10 a 15, sería incorrecto:

* 10-15 * * * /home/ivanov/prueba

Esta línea ejecutará el script. cada minuto en el rango de 10 a 15 horas. Será correcto:

0 10-15 * * * /home/ivanov/prueba

Esta entrada permitirá que el script se ejecute al comienzo de cada hora del rango especificado.

Además de la fecha, puede utilizar varias cadenas especiales:

  • @reiniciar- ejecutar comando al reiniciar
  • @anual o @anualmente- ejecutar el 1 de enero, similar a la entrada: " 0 0 1 1 * "
  • @mensual- realizar el día 1 de cada mes, similar a " 0 0 1 * * "
  • @semanalmente- realizar todos los domingos, equivalente a " 0 0 * * 0 "
  • @a diario o @medianoche- todos los días a medianoche" 0 0 * * * "
  • @cada hora- una vez por hora " 0 * * * * "

Entonces, para la ejecución diaria de nuestro script cada medianoche, puedes escribir:

@medianoche /home/ivanov/test

Una vez completada la creación del cronograma, guarde el archivo y salga del editor. El horario personalizado se guardará en /var/spool/cron/crontabs bajo el nombre del usuario actual.

Se proporciona un archivo para tareas administrativas y del sistema. /etc/crontab La sintaxis de las entradas se distingue por la presencia de un valor adicional: el usuario en cuyo nombre se iniciará la tarea:

minuto hora día mes día_de_semana comando de usuario

Un ejemplo de tal entrada:

0 19 * * 1-5 raíz /etc/copia de seguridad

Según el cual a las 19:00 horas de lunes a viernes se lanzará el guión /etc/copia de seguridad en nombre del usuario raíz.

Este archivo también contiene programaciones del sistema, por lo que su edición debe realizarse con precaución. Todas las tareas administrativas y del sistema deben ubicarse allí.

como vemos cron Es bastante fácil de usar, pero al mismo tiempo ofrece muchas oportunidades para configurar horarios en Ubuntu Server. Esperamos que este artículo ayude a los administradores a dominar esta herramienta.

Algunas tareas requieren el uso planificador- un programa especial que lanza determinados scripts, programas, etc. en un momento determinado. En la mayoría de los casos esto cron. Puede que haya otros, pero no sé nada sobre ellos. En este artículo hablaré sobre algunas de las características de configurar Cron usando el ejemplo de ejecutar un script PHP.

Trabajos cron y ejecución de un script PHP

La entrada (tarea) en sí en Cron (normalmente por nombre de carpeta crontab o crontabs) consiste en marca de tiempo Y equipos. Marca de tiempo La tarea incluye los siguientes valores: día de la semana, mes, día, hora y minuto, y equipo (a menudo llamado: ejercicio) , al menos en el caso de ejecutar un script, puede consistir en un intérprete y el propio script, por ejemplo:

`/usr/bin/cuál php` /home/l/login/public_html/script.php

En este caso: `/usr/bin/what php` es la ruta absoluta al intérprete PHP y /home/l/login/public_html/script.php es la ruta absoluta al script PHP. Cabe señalar que la ruta al intérprete y los scripts pueden diferir para usted, ya que dependen de la configuración del servidor web.

Configurar Cron a través de PU

La mayoría de los proveedores de hosting ofrecen a los clientes ofertas especiales Panel de control(PU), que facilita la configuración y el trabajo con entradas Cron. Así es como se ve ejecutar el script php cron_admitad.php en el programador de SpaceWeb.

Tenga en cuenta que la ruta al intérprete no se especifica aquí (más sobre esto un poco más adelante). También cabe destacar el uso del símbolo " tilde" (~) como alias " directorio de inicio» (teniendo en cuenta el ejemplo dado: /home/l/login). En pocas palabras, este es el directorio al que, en condiciones normales, se accede inicialmente a través de FTP.

Ruta al intérprete en el script php.

La mayoría de los problemas tienen múltiples soluciones. A menudo es difícil decir cuál es el óptimo, pero ese no es el punto.

Símbolo " enrejado" (#) es un comentario en PHP, pero la secuencia #! (Inglés) línea de explosión, hash-bang o el asunto) tiene un significado especial: especifica la ruta al intérprete del script.

El hecho es que en los sistemas operativos tipo UNIX, los scripts se pueden crear en diferentes lenguajes: PHP, Perl, Python, etc. Cuando un servidor web ejecuta un script, se basa en la extensión del archivo. (por ejemplo: .php, .phtm, phtml, etc. son extensiones comunes para el intérprete de PHP). Los sistemas operativos tipo UNIX, por regla general, no se centran en la extensión del archivo; a menudo, el archivo simplemente no la tiene. El sistema lee la primera línea y busca un controlador de script.

En el script PHP mencionado anteriormente, la primera línea que tengo es:

#!/usr/local/bin/php

Nuevamente, la ruta a su intérprete PHP puede diferir de la ruta indicada en el ejemplo, ya que todo depende de la configuración del servidor web.

Rutas a archivos en un script ejecutado a través de Cron

Otro matiz importante. Si su secuencia de comandos utiliza funciones require() , include() , fopen() , etc. que implican acceder a archivos de terceros en el servidor web, debe especificar una ruta absoluta, por ejemplo:

/home/s/shop4mru/public_html/content/data/coupons.db

Nuevamente, la ruta al archivo cupones.db puede diferir de la ruta especificada en el ejemplo, ya que todo depende de la configuración del servidor web.

En general, también puedes utilizar una ruta relativa. Para hacer esto, use la función PHP chdir(), que cambia el directorio PHP actual al especificado como su parámetro.

Para ser honesto, no he utilizado esta función, pero según tengo entendido, la situación es la siguiente. Antes de acceder a un archivo de terceros en el servidor web, se inserta algo como el siguiente código:

Chdir("public_html"); // cambiar al directorio: /home/s/shop4mru/public_html

Por lo tanto, el archivo, teniendo en cuenta el ejemplo dado, será accesible a través de una ruta relativa:

./content/data/cupones.db

El punto al principio significa el directorio actual modificado.

Resumamos la configuración de Cron

cron (a menudo llamado por el nombre de la carpeta crontab o crontabs) - un programa planificador iniciado en el servidor web del proveedor de alojamiento, que ejecuta scripts, programas y otros comandos en un momento determinado. La tarea en sí es un registro que consta de una marca de tiempo y un comando. Un punto importante aquí es indicar las rutas correctas al intérprete de script y los archivos incluidos en él.

a las 8:00 Editar mensaje 9 comentarios



Arriba