Problemas de configuración relacionados con las tareas de sincronización de Linux

01. Conocimiento sobre tareas de cronometraje

El sistema Linux está controlado por el servicio del sistema cron (crond). Hay mucho trabajo planificado en el sistema Linux, por lo que este servicio del sistema se inicia de forma predeterminada . Además, dado que los usuarios también pueden configurar tareas programadas, el sistema Linux también proporciona a los usuarios comandos para controlar las tareas programadas, el comando crontab.

01. Introducción a crond

Crond es un proceso demonio que se utiliza para realizar periódicamente ciertas tareas o esperar ciertos eventos en Linux . Cuando se instala el sistema operativo, esta herramienta de servicio se instalará de forma predeterminada y el proceso crond se iniciará automáticamente . El proceso crond se ejecutará cada minuto Compruebe periódicamente si hay una tarea que realizar, y si hay una tarea que realizar, la tarea se ejecutará automáticamente.

La programación de tareas en Linux se divide en dos categorías, programación de tareas del sistema y programación de tareas del usuario .

Programación de tareas del sistema: tareas que debe realizar el sistema periódicamente, como escribir datos en caché en el disco duro, limpieza de registros, etc. Hay un archivo crontab en el directorio / etc, que es el archivo de configuración para la programación de tareas del sistema.

[root@ufo130 ~]# cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

Las primeras cuatro líneas configuran las variables de entorno para que se ejecute la tarea crond:

  • La variable SHELL especifica qué shell usará el sistema, aquí está bash
  • La variable PATH especifica la ruta donde el sistema ejecuta el comando
  • La variable MAILTO especifica que la información de ejecución de la tarea de crond se enviará al usuario raíz por correo electrónico. Si el valor de la variable MAILTO está vacío, significa que la información de ejecución de la tarea no se enviará al usuario.
  • La variable HOME especifica el directorio de inicio que se utiliza al ejecutar comandos o scripts

La configuración de tarea específica del archivo crontab:

En el archivo crontab, cada línea representa una tarea y cada campo de cada línea representa una configuración. Su formato se divide en seis campos. Las primeras cinco secciones son la sección de configuración de tiempo y la sexta sección es el comando a ejecutar. Párrafo, el formato es el siguiente:
Inserte la descripción de la imagen aquí
en cada uno de los campos anteriores, también se pueden utilizar los siguientes caracteres especiales:

  • Asterisco (*): Representa todos los valores posibles. Por ejemplo, si el campo del mes es un asterisco, significa que la operación del comando se ejecutará cada mes después de cumplir con las restricciones de otros campos.

  • Coma (,): puede especificar un rango de lista con valores separados por comas, por ejemplo, "1,2,5,7,8,9"

  • Barra intermedia (-): se puede usar una barra intermedia entre números enteros para representar un rango de números enteros, por ejemplo, "2-6" significa "2,3,4,5,6"

  • Barra diagonal (/): puede utilizar barras inclinadas para especificar la frecuencia del intervalo de tiempo, por ejemplo, "0-23 / 2" significa que se ejecutará cada dos horas. Al mismo tiempo, la barra inclinada se puede usar con un asterisco, como * / 10, si se usa en el campo de los minutos, significa que se ejecutará cada diez minutos.

Programación de tareas del usuario : tareas que los usuarios deben realizar con regularidad, como la copia de seguridad de los datos del usuario, recordatorios periódicos por correo electrónico, etc. Los usuarios pueden utilizar la herramienta crontab para personalizar sus propias tareas programadas. Todos los archivos crontab definidos por el usuario se almacenan en el directorio / var / spool / cron. El nombre del archivo es coherente con el nombre de usuario .

Archivo de restricción de permisos:

  • /etc/cron.deny Los usuarios enumerados en este archivo no pueden usar el comando crontab
  • /etc/cron.allow Los usuarios enumerados en este archivo pueden usar el comando crontab
  • / var / spool / cron / El directorio donde se almacenan todos los archivos crontab de los usuarios, con el nombre del nombre de usuario

02. servicio de crond

Instale crontab:

yum install crontabs

Instrucciones de operación de servicio:

/sbin/service crond start 
# 启动服务

/sbin/service crond stop 
# 关闭服务

/sbin/service crond restart 
# 重启服务

/sbin/service crond reload 
# 重新载入配置

/sbin/service crond status 
# 启动服务

Compruebe si el servicio crontab se ha configurado para iniciarse en el arranque, ejecute el comando:

ntsysv

Únase para comenzar automáticamente en el arranque:

chkconfig -level 35 crond on

A través del comando crontab, podemos ejecutar comandos específicos del sistema o scripts de shell a intervalos regulares. La unidad del intervalo de tiempo puede ser cualquier combinación de minutos, horas, días, meses, semanas y más. Este comando es muy adecuado para análisis de registros periódicos o copias de seguridad de datos.

Formato de comando:

crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]

Parámetros de comando:

  • -u usuario: se utiliza para configurar el servicio crontab de un usuario, por ejemplo, "-u ixdba" significa configurar el servicio crontab del usuario ixdba, este parámetro generalmente lo ejecuta el usuario root.

  • archivo: archivo es el nombre del archivo de comando, lo que significa utilizar archivo como un archivo de lista de tareas crontab y cargar crontab. Si este archivo no se especifica en la línea de comandos, el comando crontab aceptará los comandos escritos en la entrada estándar (teclado) y los cargará en crontab.

  • -e: edita el contenido del archivo crontab de un usuario. Si no especifica un usuario, significa editar el archivo crontab del usuario actual.

  • -l: muestra el contenido del archivo crontab de un usuario. Si no se especifica el usuario, significa que se muestra el contenido del archivo crontab del usuario actual.

  • -r: Elimina el archivo crontab de un usuario del directorio / var / spool / cron. Si no se especifica ningún usuario, el archivo crontab del usuario actual se eliminará de forma predeterminada.

  • -i: proporciona un mensaje de confirmación al eliminar el archivo crontab del usuario

Haga una copia de seguridad del archivo crontab del usuario para las tareas programadas:

$ crontab -l > $HOME/用户名

Recuperar archivos crontab perdidos por los usuarios

$ crontab <filename>

Ejemplo 1: ejecutar comando cada 1 minuto

* * * * * command

Ejemplo 2: ejecutar a los minutos 3 y 15 de cada hora

3,15 * * * * command

Ejemplo 3: ejecutar a los minutos 3 y 15 de 8 a.m. a 11 a.m.

3,15 8-11 * * * command

Ejemplo 4: Ejecutar a los minutos 3 y 15 de 8 am a 11 am cada dos días

3,15 8-11 */2 * * command

Ejemplo 5: Ejecutar los minutos 3 y 15 de 8 am a 11 am todos los lunes

3,15 8-11 * * 1 command

Ejemplo 6: reiniciar smb a las 21:30 todas las noches

30 21 * * * /etc/init.d/smb restart

Ejemplo 7: reinicie smb a las 4:45 los días 1, 10 y 22 de cada mes

45 4 1,10,22 * * /etc/init.d/smb restart

Ejemplo 8: reiniciar smb a la 1:10 todos los sábados y domingos

10 1 * * 6,0 /etc/init.d/smb restart

Ejemplo 9: reiniciar smb cada 30 minutos entre las 18:00 y las 23:00 todos los días

0,30 18-23 * * * /etc/init.d/smb restart

Ejemplo 10: reiniciar smb todos los sábados a las 11:00 p.m.

0 23 * * 6 /etc/init.d/smb restart

Ejemplo 11: reiniciar smb cada hora

* */1 * * * /etc/init.d/smb restart

Ejemplo 12: entre las 11 p.m. y las 7 a.m., reinicie smb cada hora

* 23-7/1 * * * /etc/init.d/smb restart

Ejemplo 13: reinicie smb el 4 de cada mes y a las 11 en punto de todos los lunes a miércoles

0 11 4 * mon-wed /etc/init.d/smb restart

Ejemplo 14: reiniciar smb a las 4 el 1 de enero

0 4 1 jan * /etc/init.d/smb restart

Ejemplo 15: Ejecute el script en el directorio /etc/cron.hourly cada hora

01 * * * * root run-parts /etc/cron.hourly

Descripción : parámetro run-parts, si elimina este parámetro, puede escribir el nombre de un script para ejecutarlo más tarde en lugar del nombre del directorio

03. Asuntos que requieren atención

Preste atención a las variables ambientales

A veces creamos un crontab, pero esta tarea no se puede ejecutar de forma automática, y no hay problema en ejecutarla manualmente, esta situación generalmente se debe al hecho de que no hay una variable de entorno configurada en el archivo crontab.

Al definir múltiples tareas de programación en el archivo crontab, un tema que necesita especial atención es la configuración de las variables de entorno, porque cuando ejecutamos manualmente una tarea, se realiza en el entorno de shell actual. Por supuesto, el programa puede encontrar las variables de entorno , y el sistema Cuando la programación de tareas se ejecuta automáticamente, no se cargarán variables de entorno , por lo que es necesario especificar todas las variables de entorno necesarias para la operación de la tarea en el archivo crontab, para que el sistema no tenga problemas al ejecutar la programación de tareas.

No asuma que cron conoce el entorno especial que necesita, no es así. Por lo tanto, debe asegurarse de que todas las rutas y variables de entorno necesarias se proporcionen en el script shelll, excepto algunas variables globales configuradas automáticamente. Así que presta atención a los siguientes 3 puntos:

  • Escriba la ruta global cuando la ruta del archivo esté involucrada en el script;

  • Cuando se utilizan java u otras variables de entorno para la ejecución de un script, utilice el comando de origen para introducir variables de entorno, como:

cat start_cbp.sh

#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
  • Cuando el script se ejecuta manualmente, pero el crontab no se ejecuta. En este momento, debe sospechar audazmente que las variables de entorno son la culpa, y puede intentar introducir variables de entorno directamente en crontab para resolver el problema. Como:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

Preste atención a limpiar el registro de correo de los usuarios del sistema

Después de programar y ejecutar cada tarea, el sistema enviará la información de salida de la tarea al usuario actual del sistema en forma de correo electrónico. De esta manera, la información del registro será muy grande con el tiempo, lo que puede afectar el funcionamiento normal. Por lo tanto, cada tarea se redirige El manejo es muy importante.

Por ejemplo, puede establecer el siguiente formato en el archivo crontab para ignorar la salida del registro:

0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1

"/ Dev / null 2> & 1" significa que la salida estándar se redirige primero a / dev / null, y luego el error estándar se redirige a la salida estándar. Dado que la salida estándar se redirige a / dev / null, el error estándar también se redirige Directo a / dev / null, por lo que se resuelve el problema de salida del registro.

Programación de tareas a nivel del sistema y programación de tareas a nivel de usuario

La programación de tareas a nivel del sistema completa principalmente algunas operaciones de mantenimiento del sistema, y ​​la programación de tareas a nivel de usuario completa principalmente algunas tareas definidas por el usuario. La programación de tareas a nivel de usuario se puede colocar en la programación de tareas a nivel del sistema para completarse (esto no se recomienda) , pero al revés No, la operación de programación de tareas del usuario root se puede configurar con "crontab -uroot -e", o la tarea programada se puede escribir directamente en el archivo / etc / crontab. Debe tenerse en cuenta que si lo desea para definir una tarea que reinicia el sistema con regularidad, la tarea debe colocarse en el archivo / etc / crontab, incluso si se crea una tarea para reiniciar el sistema periódicamente bajo el usuario root, no es válida.

Otras Consideraciones

El trabajo cron recién creado no se ejecutará inmediatamente y tardará al menos 2 minutos en ejecutarse. Si reinicia cron, se ejecutará inmediatamente.

Cuando crontab falla repentinamente, puede intentar /etc/init.d/crond restart para resolver el problema. O verifique el registro para ver si se ha ejecutado un trabajo / error reportado tail -f / var / log / cron.

No ejecute crontab -r al azar. Elimina el archivo crontab del usuario del directorio crontab (/ var / spool / cron). Todas las crontabs de este usuario se han ido.

% En crontab tiene un significado especial, es decir, una nueva línea. Si desea usarlo, debe escapar%. Por ejemplo, la fecha de uso frecuente '+% Y% m% d' no se ejecutará en crontab y debe reemplazarse por la fecha '+% Y% m% d'.

Ejemplo de entorno de producción

  • Imprima el pinyin de su nombre en "/ server / log / file con su nombre" cada minuto.
#echo my name to /server/log/lt.log
* * * * *  echo oldboy >>/server/log/lt.log
  • Redacción profesional de tareas cronometradas en entorno de producción.
    Consejo 1: agregue los comentarios necesarios para las reglas de la tarea de tiempo, preferiblemente en inglés;
    Consejo 2: agregue / bin / sh antes de ejecutar la tarea del script de shell; de lo contrario, es posible que no pueda completar la tarea porque olvidó establecer el permiso de ejecución x para los pasos.
    Consejo 3: agregue> / dev / null 2> & 1 al final de la tarea cronometrada; equivalente a 1> / dev / null 2> / dev / null
    Consejo 4: Para ejecutar comandos con más de 2 líneas, es mejor utilice un archivo de secuencia de comandos.
    Clave 5: Realizar tareas de cronometraje relacionadas con el usuario designado.
[root@jackroo spool]# crontab -u oldboy -l
no crontab for oldboy
  • Clave 6: No imprima información al azar en el programa de tareas de producción.
    Conceptos básicos 7: el script ejecutado por la tarea cronometrada debe estandarizar la ruta.
    Conceptos básicos 8: Configure el proceso de operación regular de las tareas programadas.
1)首先要在命令行操作成功,然后复制成功的命令到脚本里,在各个细小环节减少出错的机会。
2)然后测试脚本,测试成功后,复制脚本到定时任务配置里,不要手敲。
3)先在测试环境下测试,然后正式环境规范部署。
  • Demasiados archivos en / var / spool / clientmqueue hacen que el inodo se agote. no queda espacio en el dispositivo. ¿De dónde provienen tantos archivos? No se agrega la tarea de tiempo> / dev / null 2> & 1

04. Otros servicios (atd, anacron)

Las tareas de temporización temporales y únicas pueden usar el comando at, pero es necesario instalar el servicio atd, que no se usa comúnmente .

Si nuestro servidor Linux está encendido las 24 horas del día y durante todo el año, solo necesitamos los dos servicios de atd y crond, si nuestro servidor no se inicia las 24 horas del día, entonces necesitamos la ayuda de anacron.

El servicio anacron no reemplaza cron para ejecutar una determinada tarea, pero toma el día como una unidad o realiza inmediatamente una acción anacron después del inicio. Detectará las tareas crontab que deben realizarse pero no durante el tiempo de inactividad, y luego la tarea Después de ejecutar de nuevo, anacron se detendrá automáticamente, lo que no se usa comúnmente .

Anacron detectará las tareas crontab que no se realizan en el sistema en un ciclo de un día, siete días y un mes, por lo que es muy útil para algunos entornos de uso especial. Anacron irá a analizar la hora actual y la hora de la última ejecución de anacron registrada en el registro de tiempo. Si los dos son más gruesos, si hay una diferencia, es decir, no hay crontab en algún momento, entonces se iniciará anacron. para ejecutar El crontab ya no se está ejecutando. Por lo tanto, anacron también escucha crontab para ejecutarse, por lo que anacron generalmente se ejecuta dos veces, una se ejecuta durante el inicio del sistema y la otra escribe en el programa crontab, para que pueda analizar el trabajo crontab que el sistema no ha realizado en un momento específico. . Podemos usar ll / etc / cron * / * ana * para ver el tiempo de detección de anacron.

Supongo que te gusta

Origin blog.csdn.net/qq_42226855/article/details/112057018
Recomendado
Clasificación