Notas de estudio básicas de Linux-trabajo de rutina

Trabajo rutinario

1. Trabajo de rutina realizado en ciclos

1.1. Configuración de usuario

Los datos restringidos utilizados son:

  • /etc/cron.allow :

    Escriba las cuentas que pueden usar crontab en él.Los usuarios que no están en este archivo no pueden usar crontab;

  • /etc/cron.deny :

    Escriba las cuentas que no pueden usar crontab en él. Si los usuarios no están registrados en este archivo, se puede usar crontab.

/etc/cron.allow tiene una prioridad más alta que /etc/cron.deny ! En términos generales, es suficiente mantener uno de los dos.

Cuando el usuario usa el comando crontab para establecer un horario de trabajo, el trabajo se registrará en / var / spool / cron / y la cuenta se usará como juicio.

Sintaxis de crontab:

[root@li ~]# crontab [-u 账号] [-l|-e|-r]
选项与参数:
-u:只有 root 才能使用的参数,帮助其他使用者建立/移除 crontab 工作
-e:编辑 crontab 的工作内容
-l:查阅 crontab 的工作内容
-r:移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 编辑
#用 li 的身份在每天的 12:00 发邮件给自己
[li@li ~]$ crontab -e
0 12 * * * mail -s "at 12:00" li < /home/li/.bashrc

Los seis campos del contenido de edición anterior indican respectivamente:

Significado representativo minuto hora fecha mes semana instrucción
Rango de números 0-59 0-23 1-31 1-12 0-7 instrucción

Lo que es más interesante es que "semana", 0 y 7 representan el domingo. Además, hay algunos caracteres auxiliares:

Caracteres especiales Descripción
* ¡Significa aceptar en cualquier momento!
, Representa el significado de períodos de tiempo divididos
- Representa un período de tiempo
/norte n es un número que representa cada período de tiempo

1.2. Archivos de configuración del sistema: / etc / crontab, /etc/cron.d/*

Este "crontab -e" está diseñado para el cron del usuario ¿Qué debo hacer si es un " trabajo de rutina del sistema "? ¿Aún necesita usar "crontab -e" para administrarlo? Por supuesto que no, solo necesita editar el archivo / etc / crontab . Una cosa a tener en cuenta es que crontab -e crontab es en realidad el archivo ejecutable / usr / bin / crontab , pero / etc / crontab es un archivo de texto.

[root@li ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root		#若有额外的 STDOUT,以 email 将数据发给谁

# 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

1.2.1, la ubicación donde el servicio crond lee el archivo de configuración

En términos generales, crond tiene tres archivos de configuración de script de ejecución preestablecidos:

  • / etc / crontab
  • /etc/cron.d
  • / var / spool / cron / *

Entre los tres lugares, los archivos del archivo / etc / crontab y el directorio /etc/cron.d/* están más relacionados con el funcionamiento del sistema, y ​​el otro es el archivo de configuración que está más relacionado con el propio trabajo del usuario. Solo póngalo en / var / spool / cron /. Ahora veamos los archivos en /etc/cron.d:

[root@li cron.d]# ll /etc/cron.d
总用量 4
-rw-r--r--. 1 root root 128 8月   9 2019 0hourly
[root@li cron.d]# ls /etc/cron.*
/etc/cron.deny

/etc/cron.d:
0hourly

/etc/cron.daily:
logrotate  man-db.cron

/etc/cron.hourly:
0anacron

/etc/cron.monthly:

/etc/cron.weekly:

[root@li cron.d]# cat /etc/cron.d/0hourly
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly

Preste atención a la última línea, cada hora en punto ejecutará el comando run-parts /etc/cron.hourly. Entonces, ¿qué son las piezas de ejecución? Si analiza este archivo ejecutable, encontrará que es un script de shell. El script run-parts seleccionará aleatoriamente una hora para ejecutar todos los archivos ejecutables en el directorio /etc/cron.hourly en unos 5 minutos. Por lo tanto, el archivo ubicado en /etc/cron.hourly/ debe ser un script de comando que se pueda ejecutar directamente.

Hay cron.daily /, /etc/cron.monthly, /etc/cron.weekly en / etc. La diferencia entre estos tres archivos y /etc/cron.hourly es que estos tres directorios son ejecutados por anacron Sí, y el método de ejecución de anacron se coloca en /etc/cron.hourly/0anacron.

Resumido como sigue:

  • Use crontab -e para un comportamiento personalizado: si crea un trabajo de rutina basado en necesidades personales, se recomienda usar directamente crontab -e para crear su trabajo. Esto también asegurará que otros no vean su comportamiento de comando.
  • Vim / etc / crontab para el mantenimiento y la administración del sistema: si su trabajo de rutina es una tarea importante del sistema, para que su propia administración sea conveniente y fácil de rastrear, se recomienda escribir directamente en / etc / crontab.
  • El software desarrollado por mí mismo utiliza vim /etc/cron.d/newfile.
  • Tareas especiales fijas realizadas por horas, diarias, semanales y diarias: si está relacionado con el mantenimiento del sistema, se recomienda colocarlo en / etc / crontab.

2. Puede despertar tareas laborales durante el apagado

2.1 ¿Qué es anacron?

Anacron no se usa para reemplazar crontab. El propósito de anacron es lidiar con la ejecución de crontab en sistemas Linux que no se inician las 24 horas del día. Así como trabajos de rutina que se han excedido en tiempo por alguna razón y no se han realizado .

2.2, anacron y / etc / anacrontab

Anacron es en realidad un programa más que un servicio.

[root@li cron.d]# cat /etc/cron.hourly/0anacron
#!/bin/sh
# Check whether 0anacron was run today already
if test -r /var/spool/anacron/cron.daily; then
    day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
    exit 0;
fi

# Do not run jobs when on battery power
if test -x /usr/bin/on_ac_power; then
    /usr/bin/on_ac_power >/dev/null 2>&1
    if test $? -eq 1; then
    exit 0
    fi
fi
/usr/sbin/anacron -s

La sintaxis básica de anacron:

[root@li cron.d]# anacron [-sfn] [job]...
[root@li cron.d]# anacron -u [job]...
选项与参数:
-s:开始一连续的执行各项工作(job),会依据时间记录文件的数据判断是否进行
-f:强制进行,而不去判断时间记录文件的时间戳
-n:立刻进行未进行的任务,而不延迟等待时间
-u:仅更新时间记录文件的时间戳,不进行任何工作
job:由 /etc/anacrontab 定义的各项工作

Archivo de configuración de Anacron:

[root@li cron.d]# cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45		#随机给予最大延迟时间,单位是分钟
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22		#延迟多少个小时内应该要执行的任务时间

#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly
[root@li cron.d]# more /var/spool/anacron/*		#时间戳文件
::::::::::::::
/var/spool/anacron/cron.daily
::::::::::::::
::::::::::::::
/var/spool/anacron/cron.monthly
::::::::::::::
::::::::::::::
/var/spool/anacron/cron.weekly
::::::::::::::

Tomemos la configuración de la línea /etc/cron.daily para ilustrar. El significado de los cuatro campos:

  • Número de días: El número de días entre la ejecución actual de anacron y la marca de tiempo (archivo de registro de tiempo en / var / spool / anacron /). Si supera este número de días, está listo para iniciar la ejecución. Si no supera este número de días, no se darán instrucciones posteriores;
  • Tiempo de demora: si se determina que el trabajo de rutina debe realizarse después de que se excede el número de días, retrase el tiempo de ejecución, porque le preocupa que haya otros conflictos de recursos al comenzar de inmediato;
  • Definición del nombre del trabajo;
  • La instrucción real que se ejecutará.

De acuerdo con el contenido del archivo de coordinación anterior, probablemente sepamos que el proceso de ejecución de anacron debería ser así:

  1. El número de días desde el análisis de / etc / anacrontab hasta el nombre de cron.daily es 1 día;
  2. Desde /var/spool/anacron/cron.daily, recupere la marca de tiempo de la última ejecución de anacron;
  3. Comparando el paso anterior con la hora actual, si la diferencia en días es más de 1 día (incluido 1 día), está listo para ejecutar la instrucción;
  4. Si está listo para hacer un comando, se retrasará 5 minutos + 3 horas según la configuración de / etc / anacrontab;
  5. Una vez transcurrido el tiempo de demora, se ejecutarán las siguientes instrucciones, a saber, run-parts /etc/cron.daily;
  6. Después de la ejecución, el programa anacron finaliza.

Finalmente, resumimos:

  1. crond leerá activamente / etc / crontab, / var / spool / cron / *, /etc/cron.d/* y otros archivos de configuración, y los ejecutará de acuerdo con la configuración de tiempo de "minuto, hora, día, mes y semana" Diversos arreglos de trabajo;
  2. Según la configuración de /etc/cron.d/0hourly, vaya activamente al directorio /etc/cron.hourly y ejecute todos los archivos ejecutables en el directorio;
  3. Debido al archivo de script /etc/cron.hourly/0anacron, ejecute anacron activamente cada hora y llame al archivo de configuración de / etc / anacrontab;
  4. De acuerdo con la configuración de / etc / anacrontab, analice los archivos de ejecución en /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly diariamente, semanalmente y mensualmente para realizar un ciclo fijo. Instrucciones.

En otras palabras, si la acción que necesita realizar todos los domingos se coloca en / etc / crontab, la acción caducará mientras caduque y no se recuperará ni se ejecutará de nuevo. Pero si se coloca en el directorio /etc/cron.weekly, entonces el trabajo se realizará con regularidad, casi con certeza una vez a la semana. Si lo apaga durante más de una semana, el trabajo se ejecutará activamente en unas pocas horas después de que lo encienda.

Supongo que te gusta

Origin blog.csdn.net/qq_36879493/article/details/108033044
Recomendado
Clasificación