archivo cron. Cron: ejecuta programas de usuario en un momento específico

Escuché mucho acerca de que Linux tiene un práctico programador de tareas cron. Sin embargo, no necesitaba usarlo y no quería entender su configuración... la consola, muchas letras en inglés... daba miedo. Pero, afortunadamente, mis temores fueron en vano: todo es simple para los elementales. El artículo verá cómo configurar la ejecución de sus scripts en un horario y, como ejemplo, instalaremos el "cuco".

Primero, un poco sobre cómo funciona en general.

Cuando se inicia el sistema, se inicia el demonio cron. Se puede controlar (detener/iniciar/comprobar estado) con el comando: sudo service cron (detener/iniciar/estado). Pero esto rara vez es necesario.

El propio demonio cron duerme la mayor parte del tiempo y abre ligeramente el ojo una vez por minuto para comprobar si hay trabajos en ese momento. Si no hay tareas, vuelve a hibernar.

Los trabajos están en archivos cuyos nombres son iguales a los nombres de usuario, y los propios archivos están en la carpeta /var/spool/cron/crontabs. La carpeta está protegida contra interferencias externas y solo está disponible para el superusuario. Pero, cada usuario puede configurar un horario para sus tareas sin conocer la contraseña de root (superusuario).

que seria configurar cron por usuario regular suficiente para escribir:

Si necesita crear una tarea para otro usuario, iníciela con el comando:

sudo crontab -u usuario -e

En lugar de un usuario, escribimos el usuario deseado, por ejemplo, root.
La primera vez que lo ejecute, se le preguntará sobre el editor... Me gusta nano. Es simple y se ejecuta sin una GUI.


La sintaxis de las tareas es muy simple. Considere el ejemplo de la captura de pantalla del lanzamiento del cuco:

0 */1 * * * /home/zegi/bin/kuku

En total, hay 2 campos principales en la tarea: 0 */1 * * *: indica el momento en que funcionará el comando. Y /home/zegi/bin/kuku es la ruta al script que describe los comandos.

No debería haber ningún problema con la dirección del script (zegi es el nombre de usuario... no olvides poner el tuyo). Pero necesito explicar cómo configurar el tiempo cron para ejecutar el script.

En total, tenemos 5 celdas para entrada, las cuales están separadas por un espacio.
1 - minutos (números del 0 al 59)
2 - horas (de 0 a 23)
3 - día del mes (del 1 al 31)
4 - mes del año (del 1 al 12... por ejemplo, febrero es 2)
5 - día de la semana (del 1 al 7. La semana occidental se usa cuando el inicio es el domingo, es decir, dom-1, lun-2, mar-3, mié-4, jue-5, vie-6, sáb-7 ).

Cada celda debe ser llenada. Si desea que el comando se ejecute todos los meses, configure * en el 4to campo. Lo mismo se aplica al resto de los campos.

Volvamos al ejemplo del cuco, donde el script se ejecuta cada hora. Para establecer la frecuencia se utiliza / . Por ejemplo, si desea que la tarea se ejecute cada 5 minutos, los lunes, configure:

Si desea que la tarea se ejecute cada hora, deberá establecer un minuto determinado. Si deja un asterisco (* */1 * * *), entonces cron se ejecutará cada minuto, porque se cumplen las condiciones: verificó las 5 celdas y su valor corresponde a la hora actual (minutos - de todos modos. Horas - cada hora , no solo cierto ).
La barra inclinada siempre debe ir precedida de un asterisco. Por ejemplo, asignar la ejecución cada minuto, a partir del día 30, ingresando 30/1, no funcionará.

Si es necesario que la tarea no se realice de forma cíclica, sino varias veces, los valores se escriben separados por comas.
Por ejemplo, debe completar la tarea entre semana a las 12 del mediodía y a las 6 de la tarde. Entonces se verá así:

* 12,18 * * 2,3,4,5,6

Al final de las tareas de edición, no olvide guardar los cambios (Ctrl + O > enter), y luego puede salir (Ctrl + x).

Cron debe notificar que ha aparecido una nueva tarea y está lista para ejecutarla escribiendo: "crontab: instalando nuevo crontab".

Puede ver las tareas creadas (tal vez no hizo nada por sí mismo, pero el administrador de la red configuró algo para usted) con el comando:

Y al final yo mismo guión de cuco, que cuckoos cada hora:

#!/bin/bash
h=`fecha +%l`
mientras [ $h -gt 0 ]
hacer
reproducir ~/kukushka.wav
h=$[$h-1]
hecho

Puedes descargar el sonido del cuco con el comando:

wget http://dl.dropbox.com/u/24844052/tuksik/kukushka.wav

El juego está incluido en el paquete de medias. En ubuntu, se puede instalar con el comando.

Un mecanismo útil que proporciona control sobre la ejecución de procesos en linux es un programador de tareas o cron, expediente crontab en el directorio etc, utilizando este archivo, se agregan scripts, tareas que podemos escribir para un sistema en ejecución, por ejemplo, para controlar el trabajo linux sistemas por correo electronico

cron- el servicio daemon se utiliza en linux/unix sistemas como programador de tareas. El daemon le permite ejecutar secuencias de comandos periódicamente para su ejecución.

Los archivos creados se colocan en el directorio:
/usr/spool/cron/crontabs o /var/spool/cron/tabs
Solo necesita editarlos mediante la ejecución de crontab -e
Dependiendo del período de ejecución, los archivos se pueden colocar en directorios:
/etc/cron.daily
/etc/cron.weekly
/etc/cron.mensual

Crear trabajos cron
Crear un trabajo en crontab parece completar seis campos obligatorios, su significado es el siguiente:
1. Minutos: un número del 0 al 59
2. Horas: un número del 0 al 23
3. Día del mes: un número del 1 al 31
4. El número del mes en el año - un número del 1 al 12
5. Día de la semana: un número del 0 al 7
0-domingo, 1-lunes, 2-martes, 3-miércoles, 4-jueves, 5-viernes, 6-sábado
Cada uno de los parámetros anteriores se puede establecer en:
a) Separado por comas - 3.7.9 (en el campo día del mes 3.7.9 respectivamente)
b) A través de un guión - 3-9 (en el campo de la hora significará ejecución a las 3,4,5,6,7,8,9)
c) * - se ejecutará en todos los valores posibles
d) / - configuración de períodos de tareas adicionales - */8 en el campo de minutos, se ejecutará cada ocho minutos

Cómo iniciar una tarea cron cuando el sistema arranca. Para ejecutar un script en el arranque del sistema linux se utiliza la palabra clave de reinicio. Por ejemplo:

Además, también puede utilizar los siguientes palabras clave:
@anual - igual que 0 0 1 1 * (una vez al año)
@daily - igual que 0 0 * * * (una vez al día)
@hourly - igual que 0 * * * * (una vez por hora)

Comandos para administrar crontab
- ver tareas para la cuenta actual
crontab-l
- ver las tareas de la cuenta deseada
crontab -u nombre de usuario -l
- Editar trabajos cron
crontab -e
- Edición de trabajos cron para un usuario determinado
crontab -u nombre de usuario -e

Ejemplos de trabajos cron:
Complete la tarea a las 7 am todos los días
0 7 * * * raíz /home/scripts/mount.sh
Completa la tarea a las 17:30 todos los días.
30 17 * * * raíz /home/scripts/mount.sh
Ejecute la tarea todos los meses el primer día a las 0 horas 0 minutos
0 0 1 * * raíz /home/scripts/mount.sh
Ejecutar una tarea cada 4 horas
* * /4 * * * raíz /home/scripts/mount.sh
Ejecutar tarea en el arranque linux
@reboot raíz /home/scripts/mount.sh

Configuración de cron adicional
Para recibir un informe de trabajo cron puedes definir la variable MAIL al principio cron guion
CORREO=correo.correo.local
De manera predeterminada, la carta contendrá todos los mensajes generados por el script, para que esto no suceda, debe agregar el script al trabajo cron > /dev/null 2>&1
Para deshabilitar la recepción de mensajes de cron, deje la variable MAIL sin configurar
CORREO=” ”
Es posible determinar la ruta al archivo con el script usando la variable PATH, por ejemplo
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/scripts, en crontab permitirá escribir en la línea de parámetros del trabajo
@reboot montaje raíz.sh
Ejecutar scripts a través de cron usando el intérprete de php
* 1 * * * /usr/local/bin/php - q mount.sh > /dev/null 2>&1
/usr/local/bin/wget -O /dev/null -q http://"site.com/cron.php?action=123"

Introducción

Al alojar el sitio, queremos lograr un funcionamiento ininterrumpido sin nuestra participación.

Esto significa que necesita automatizar procesos, y aquí cron viene al rescate.

cron- programa, demonio para autoencendido programas y scripts en el servidor en el momento adecuado.

Crontab en el panel de control de Timeweb

Si su cuenta es paga y no lo han atrapado enviando spam, entonces la sección Crontab está disponible y operativa:

La interfaz de Crontab en el panel de control de Timeweb es amigable e intuitiva: incluso los usuarios novatos sin experiencia previa con cron descubrirán fácilmente cómo crear tareas. Una vez que crea una tarea, puede modo automatico hacer copias de seguridad, envíos, borrar caché y realizar otras acciones típicas.

Crontab en el panel de control de Timeweb ayudará a cualquier usuario a automatizar sus tareas y lograr el resultado deseado.

Después de la información básica, hablaré sobre los matices que es importante tener en cuenta al trabajar con cron.

Las nuevas tareas se crean en la sección Crontab. Para ello, deberá rellenar los campos:

  • Nombre. Este es el nombre de nuestra tarea.
  • Tipo de archivo y ruta al archivo. Según el idioma en el que esté escrito el script, seleccione el tipo de archivo y la ruta al mismo. Si una tarea ejecuta un script que requiere variables del servidor web, ejecutarlo directamente a través del intérprete de php genera errores. Por lo tanto, en el caso de que utilice un script que funciona cuando se ejecuta a través de la barra de direcciones del navegador, debe seleccionar el tipo de archivo "Solicitud HTTP" y especificar la URL para la solicitud de la misma manera que se indica en Barra de dirección"su_sitio/ruta/hacia/script/script.php?opción1=valor1&opción2=valor2".

Si es necesario, especifique una cuenta de administrador en la sección Crontab. Los mensajes se enviarán a este buzón si aparece un mensaje en la consola cuando se ejecuta el script.

Matices

Pequeños matices a tener en cuenta al trabajar con cron.

1. Cron funciona si la cuenta es paga y no hay restricciones.

Puede verificar el estado creando un archivo con la extensión php (por ejemplo, twtest.php) con el código:

Y accediendo al archivo en el navegador.

En el navegador verás la información:

uid=12345(iniciar sesión) gid=600(clientes) grupos=600(clientes) - indica que cron y mail están disponibles

uid=12345(inicio de sesión) gid=600(clientes) grupos=601(nuevos clientes),600(clientes),660(spammers) - escribir a soporte

2. El archivo que ejecute debe tener permisos de lectura y ejecución (r+x).

De forma predeterminada, los archivos en el alojamiento se crean con permisos de 600. Puede cambiar los permisos a los que necesita a través de ssh con el comando:

Chmod 744 twtest.php

o en Administrador de archivos, Timeweb tiene una instrucción sobre esto:

3. Para no ensuciar el correo electrónico con cartas innecesarias,configurar scripts ejecutados con frecuencia para iniciar sesión en un archivo, no a la consola.

CRON sobre SSH

La configuración del programador a través de ssh se ha descrito tantas veces que no será posible decir una nueva.

La conexión a través de ssh se describe en detalle en centro de ayuda tiempoweb:

Después de leer, debe encontrar el archivo con el script, moviéndose entre directorios con el comando cd. Una vez que encuentre el archivo, escriba pwd y copie la ruta (ejemplo "/home/c/cc123456/public_html/test/")

Si no sabe qué permisos tiene el archivo, ingrese:

Chmod 744 nombre de archivo

Al conectarse a través de ssh, puede editar tareas con el comando

Crontab-e

La primera vez que el servidor le pedirá que seleccione un editor:

Seleccione un editor. Para cambiar más tarde, ejecute "select-editor". 1. /bin/ed 2. /bin/nano<---- easiest 3. /usr/bin/mcedit 4. /usr/bin/vim.basic 5. /usr/bin/vim.tiny Choose 1-5 :

El sistema apunta a un editor nano simple debajo del número 2. Si calculó mal las fuerzas o seleccionó vi accidentalmente, no se alarme, presione Esc, luego escriba dos puntos q y presione enter.

Para cambiar el editor, ingrese el comando:

seleccionar-editor

y elige nano.

Las tareas se escriben línea por línea. Ejemplo:

1 2 3 4 5 /opt/php56/bin/php /home/c/ss123456/public_html/twtest.php

Los significados de los cinco primeros valores son:

  • 1 minuto es un numero del 0 al 59
  • 2 horas - un número del 0 al 23
  • 3er día del mes - un número del 1 al 31
  • 4 es el número del mes en el año - un número del 1 al 12
  • 5.° día de la semana: un número del 0 al 7 (0-domingo, 1-lunes, 2-martes, 3-miércoles, 4-jueves, 5-viernes, 6-sábados, 7-domingos)

Para cada parámetro, es posible establecer el número requerido de valores separados por comas. Por ejemplo, si escribes 8.23 ​​en el campo "horas", la tarea se ejecutará a las 8:00 am y a las 23:00 pm. Puede configurar el intervalo: 9-18 significará que el programa comenzará cada hora en el período de 9 a 18 horas inclusive. El símbolo "*" significa "todos los valores posibles". Por ejemplo, especificar "*" en el campo "horas" significará "ejecutar cada hora". El símbolo "/" se utiliza para indicar la frecuencia adicional del trabajo. Por ejemplo, "*/3" en el campo "minutos" significa "cada tres minutos".

"/opt/php*/bin/php" donde php*/ = php53/ php5.3/ php54/ php5.4/ php56/ php5.6/ php70/ php7.0/ php71/ php7.1/

La última entrada indica la ruta al archivo y el nombre del archivo que estamos lanzando.

Matices

  1. Cuando se cambia en el panel de control en la sección "Crontab", ¡se eliminarán los cambios en las entradas realizadas a través de ssh!
  2. Si se definen ambos campos, "día del mes" y "día de la semana", dicha tarea se ejecutará cada día de la semana especificado, independientemente del día del mes. Por ejemplo, el siguiente comando se ejecutará a las 9:19 todos los miércoles y todos los días 7 del mes, incluso si el día 7 no es miércoles.

19 9 7 * 3 /opt/php56/bin/phpn /home/c/ss123456/public_html/twtest.php

Casos especiales

Para ejecutar una tarea más de una vez por minuto, use la suspensión.

Para hacer esto, escriba en crontab:

* * * * * /opt/php56/bin/php /home/k/konoplev/tmp/twtest.php; /bin/dormir30; /opt/php56/bin/php /home/k/konoplev/tmp/twtest.php

para ejecutar un archivo cada 30 segundos.

A veces, cuando se usa el planificador de programas cron, no se sabe cuánto tiempo lleva la ejecución del script. Para evitar un inicio de script doble, se requiere una verificación de la finalización del inicio del script anterior.

La opción lógica sería crear un archivo de bloqueo y verificar la existencia del archivo al ejecutar el script. Pero en el alojamiento de Timeweb, así como en otros alojamientos, hay un límite de procesador. El script depende de las condiciones y el tiempo de ejecución, lo que significa que no podemos predecir el tiempo de ejecución del script. Si el script se ejecuta en violación de las reglas y restricciones ( ), entonces el proceso terminará en el lado del alojamiento. Luego, el archivo de bloqueo no se eliminará, lo que significa que cron no ejecutará el script hasta que se elimine el archivo.

Maestro del departamento de ingeniería dijo cómo resolver el problema.

Primero, cree un script sh en el archivo /home/c/cc123456/tmp/twtest.sh:

#!/bin/bash [correo electrónico protegido] no_spaces=`echo $comando | sed -e "s/\s/_/g" -e "s|/|_|g"` pidfile=/var/tmp/$sin_espacios.pid lockfile=/var/tmp/$no_spaces.lock si [[ -e $pidfile ]] entonces pid=`cat $pidfile 2>/dev/null` ps h $pid >/dev/null 2>/dev/null si[[$? -eq 0 ]] luego salga 1 else rm $lockfile fi fi echo $$ > $pidfile /usr/bin/flock -w 0 $archivo de bloqueo $comando rm $pidfile

En el panel de control en la sección crontab, seleccione el tipo "Archivo binario ejecutable".

En el campo "Ruta completa", escribe:

/inicio/c/cc123456/tmp/twtest.sh /opt/php56/bin/php /inicio/c/cc123456/tmp/twtest.php

Dónde

  • /home/c/cc123456/tmp/twtest.sh - nuestro script de prueba
  • /opt/php56/bin/php - ruta al intérprete deseado
  • /home/c/cc123456/tmp/twtest.php - ruta a nuestro script

Especifique el tiempo de lanzamiento requerido y proponga un nombre.

Conclusión

Ahora sabe cómo trabajar con cron y ejecutar tareas automáticamente. Consulte "man cron" para obtener más información sobre cron. ¡Buena suerte!

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

Cómo configurar cron en la cuenta personal (para tarifas unix)

Dado que no todos los programas PHP se pueden ejecutar a través de CLI SAPI sin modificación previa, es posible ejecutarlos a través de wget. Por ejemplo:

/usr/local/bin/wget -O /dev/null -q http://misitio.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 la 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 controlar completamente la operación de los trabajos que se ejecutan periódicamente. Para hacer esto, coloque la siguiente línea al comienzo del script cron:

MAILTO=direcció[email protected]

Por supuesto, direcció[email protected] debe ser reemplazada con una dirección real Correo electrónico donde se deben entregar 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 electrónico la salida de los scripts de 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 la salida de texto del script, debe agregar caracteres al final de la cadena del script para cron.

> /dev/null 2>&1

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

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

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

/usr/local/bin/php -l guión.php

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

Restricciones

Los programas ejecutados a través de cron están sujetos a los mismos límites de recursos que los procesos ejecutados por un usuario en un shell de Unix. Estamos hablando de restricciones en el tiempo de ejecución del programa, el número de memoria disponible, límites de tamaño de archivo, etc.

(Tareas programadas) se utiliza para configurar la ejecución de comandos en un horario o en un horario estrictamente designado. Mediante el uso pestaña cron Puedes pedir tiempo específico, y exactamente en ese momento se ejecutará el comando que especificó. configurar pestaña cron posible de tal manera que la tarea se ejecutará una vez cada mes, día, hora y cada minuto o por ejemplo cada 10 minutos. También puede combinar, por ejemplo, necesita completar la tarea una vez por hora durante las primeras 2 horas, luego no completar las próximas 2 horas.

Además, una de las comodidades es la posibilidad de enviar los resultados de las tareas por correo electrónico. Para hacer esto, haga clic en la inscripción correspondiente e ingrese su correo electrónico.

Maestro de trabajos

primer contacto con cron para nosotros comienza con la apertura Maestros de misiones. Con la ayuda del asistente, puede configurar el tiempo de ejecución de los scripts sin ningún conocimiento serio de administración, simplemente seleccionando una determinada combinación de las listas desplegables. También debe ingresar la ruta al script o el comando que se ejecutará en cron.

Veamos un ejemplo de ejecución de un script escrito en el lenguaje PERL para ejecutarse cada 5 minutos.

Después de hacer clic en el botón, debajo de la ventana principal cron aparecerá nueva entrada con su primera configuración. El número de dichos registros no está limitado.

Ahora tenemos la primera tarea que podemos encender/apagar, cambio o Eliminar mediante los botones situados a la derecha, frente a cada una de las tareas:

Habilitar/deshabilitar tarea;
- cambiar la tarea;
- eliminar tarea.

Configuración manual de CronTab.

También en la sección está Ajuste manual, que le permite configurar el tiempo de ejecución del script de la forma habitual, para aquellos que están familiarizados con cron.

Intervalo de tiempo

Los minutos pueden ser de 0 antes de 59
El horario puede ser de 0 antes de 23
El día del mes puede ser de 1 antes de 31
El mes puede ser 1 antes de 12
El día de la semana puede ser de 0 antes de 7 , donde 0 y 7 son domingo

Se puede configurar pestaña cron para realizar tareas no sólo en un determinado
tiempo, pero también cada minuto, cada hora, diariamente, semanalmente o mensual,
usando una combinación */X

Ejemplos

*/5 * * * * - ejecuta el comando cada cinco minutos
0 */3 * * * - ejecutar cada tres horas
0 12-16 * * * - ejecuta el comando cada hora de 12 a 16 (a las 12, 13, 14, 15 y 16)
0 12,16,18 * * * - ejecuta el comando cada hora a las 12, 16 y 18 horas

*/1 * * * * /usr/bin/php ~/site.ru/public_html/test.php- ejecutar cada minuto php-script test.php
0 */1 * * * /usr/bin/perl ~/site.ru/public_html/test.pl- ejecute perl script test.pl cada hora

Equipo

Es necesario establecer la ruta al script desde el directorio de inicio
Por ejemplo: public_html/cgi-bin/script.pl
El sistema sustituirá el propio símbolo. ~/ (esta combinación reemplaza la ruta completa)
Obtener: ~/public_html/cgi-bin/script.pl
Si pones un símbolo al final del camino & (ampersand), la secuencia de comandos se ejecutará en segundo plano.
La configuración de este símbolo es opcional.