Configurar scripts de ejecución regulares bajo Linux

  
        

Lo siguiente es para entornos que no son de Ubuntu, y algunas de las diferencias entre Ubuntu se cubrirán al final del artículo.

Bajo Linux, a menudo es necesario ejecutar periódicamente algunos scripts para implementar algunas funciones.

Bajo Linux, usamos crontab para implementar la función de secuencia de comandos de ejecución regular. A continuación se describe el uso de crontab. Y algunos de los problemas que encontré en

I. Instrucciones para usar crontab

1. crond es un comando que Linux utiliza para ejecutar programas de forma regular. Este comando de programación de tareas se inicia de forma predeterminada cuando se instala el sistema operativo. El comando crond comprueba periódicamente cada minuto para que se realice el trabajo, y si hay trabajo que realizar, se ejecutará automáticamente. La tarea de la programación de tareas de Linux se divide principalmente en las siguientes dos categorías:

a. Trabajo de ejecución del sistema, como limpieza de basura, copia de seguridad

b. Trabajo definido por el usuario, como cada 5 minutos Scripts

2. crontab es un disparador para tareas periódicas ejecutadas en sistemas UNIX. El usuario registra las tareas que deben realizarse periódicamente en este archivo y, a continuación, crond revisa periódicamente la lista de ejecución periódica y la ejecuta automáticamente cuando hay trabajo por realizar.

man crontab puede ver la siguiente información

a. /etc/crond.allow indica la lista de usuarios que pueden usar crontab

b. /etc /crond .deny indica una lista de usuarios a los que no se les permite usar crontab

3. Varios formatos de comando comúnmente utilizados por crontab

crontab -l //muestra el contenido del archivo crontab del usuario

crontab -e //Editar el contenido del archivo crontab del usuario

crontab -r //eliminar el archivo crontab del usuario

4. El formato básico del archivo crontab es el siguiente

* * * * * comando

Órdenes de día y semana de la hora del día

Cada columna significa significado

a. El primer * indica minutos de 1 a 59 minutos. El valor predeterminado * indica que se ejecuta cada minuto, xy indica que x ~ y se ejecuta cada minuto, * /n significa que se ejecuta cada n minutos, x, y, z significa que se ejecutan x, y, z minutos. .

b. El segundo * indica la hora 1 ~ 23 horas, el valor predeterminado * indica que se ejecuta cada hora, xy indica que x ~ y se ejecuta cada hora, * /n significa cada Ejecutado una vez cada hora, x, y, z significa x, y, z horas se ejecutan.

c. El tercero * indica el día 1 ~ 31, el valor predeterminado * indica que se ejecuta todos los días, xy indica que x ~ y se ejecuta todos los días, * /n significa cada n días para ejecutar Una vez, x, y, yz se ejecutan en x, y, yz días.

d. El cuarto * indica el mes 1 al 12, el valor predeterminado * indica que se ejecuta cada mes, y el xy indica que x a y se ejecuta cada mes, * /n significa cada Ejecutar una vez cada n minutos, x, y, z significa x, y, z días se ejecutan.

e. La quinta * indica la semana 0 a 6 (0 significa domingo), el valor predeterminado es de lunes a domingo, y x-y significa que cada semana se ejecutan de x a semana semanalmente.

5. Algunos ejemplos de archivos crontab

a. 30 21 * * * /usr/local/etc/rc.d/lighttpd restart //significa reiniciar Apache a las 21:30 todos los días

b. 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart //Representa mensualmente 1,10,22 4:45 reiniciar apache

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart //Reinicie Apache cada 30 minutos entre las 18: 00 y las 23: 00 todos los días

d * * /1 * * * /usr/local/etc/rc.d/lighttpd restart //significa reiniciar Apache cada hora

e. * /5 * * * * /usr /local /etc /rc.d/lighttpd restart //Restablecer apache cada 5 minutos

II. Ejemplo específico

1. Primero creo un script de shell llamado /s en /home /chenguolin /tmp /.sh. Tenga en cuenta que la ruta dentro del script usa una ruta absoluta.

La función de este script es redirigir la salida de la fecha actual al archivo de salida en el directorio actual.

2. A continuación, configure el script para que se ejecute cada 2 minutos, > /dev /null 2 ​​> &1. El motivo es que el sistema enviará un correo electrónico al usuario después de cada ejecución de la tarea. A través de esta operación, la información se puede redirigir a /dev /null. El archivo /dev /null es similar a la papelera de reciclaje. El sistema se limpia automáticamente después de un período de tiempo. .

* /2 * * * * sh /home/chenguolin/tmp/s.sh > /dev /null 2 ​​> &1

Luego encontré n 2 minutos, El archivo de salida no tiene salida en absoluto.

3. Después de que Google /Baidu no haya obtenido resultados, le pregunté a mi colega que la razón es que crontab a veces no tiene forma de ejecutar los dos archivos en el directorio de inicio del usuario, a saber, .bashrc y .bash_profile

Estos dos archivos tienen las siguientes funciones

.bashrc es la información de bash para tu shell bash, que se lee al iniciar sesión y cada vez que abres un shell nuevo; Br>

La función de .bash_profile es que cada usuario puede usar este archivo para ingresar información de shell específica para su propio uso. Cuando el usuario inicia sesión, ¡el archivo solo se ejecuta una vez! De forma predeterminada, establece algunas variables de entorno para ejecutar el archivo .bashrc del usuario,

, por lo que debemos agregar manualmente /home/chenguolin/.bashrc &source /home /chenguolin /al archivo crontab. .bash_profile

La función de la fuente es ejecutar comandos en el entorno actual de bash, mientras que las secuencias de comandos es iniciar una subshell para ejecutar comandos. De esta manera, si el comando para establecer la variable de entorno (o alias, etc.) se escribe en los scripts, solo afectará a la subshell y no podrá cambiar el BASH actual. Por lo tanto, al configurar la variable de entorno a través del archivo (columna de comando), use el comando de origen.

Por lo tanto, el archivo crontab se convierte en

* /2 * * * * source &&/home/chenguolin/.bashrc &&source /home/chenguolin/.bash_profile &&sh /home/chenguolin/tmp/s.sh > /dev /null 2 ​​> &1

4. Se encuentra que el script se puede ejecutar periódicamente.

Si no funciona, solo puede verificarlo buscando el registro. Los archivos de registro de Linux crond que no son de Ubuntu se guardan en /var /log

III. Uso de crontab para ejecutar scripts en ubuntu

Tenga en cuenta las siguientes preguntas para

1. El programa de servicio crontab en ubuntu es cron, y el registro de servicio cron predeterminado no está disponible, debemos abrir manualmente

a. Sudo vim /etc/rsyslog.d/50-default.conf

b. Localice la línea cron. * y elimine el comentario

c. Luego reinicie el servicio cron sudo service cron restart

d. Esto encontrará el registro cron en /var /log El archivo, podemos encontrar el problema mirando el archivo de registro

2. En ubuntu, no hay un archivo .bash_profile en el directorio de inicio del usuario, y el archivo .bashrc se ejecutará automáticamente, simplemente escriba lo siguiente

* /2 * * * * sh /home/chenguolin/tmp/s.sh > /dev /null 2 ​​> &1

Copyright © Conocimiento de Windows All Rights Reserved