linux-crontab agendado execução/agendamento de tarefas agendadas a cada minuto

I. Introdução

Este artigo explica como chamar tarefas agendadas no Linux, como imprimir logs a cada minuto, executar scripts de corte de log às 24 horas todos os dias, etc.

2. Visão geral do crontab

2.1. Introdução ao comando crontab

Em sistemas Linux, o comando crontab é um comando usado para executar tarefas agendadas crond(crontab)是系统默认自带的定时服务. Podemos configurar tarefas agendadas editando o arquivo crontab para que o sistema possa executar comandos automaticamente de acordo com o horário e frequência definidos. Os arquivos Crontab geralmente são salvos nos diretórios /etc/crontab e /var/spool/cron.
Insira a descrição da imagem aqui

Resumo: O comando crontab só pode ser usado após a instalação do serviço crond. O comando crontab edita as tarefas agendadas no formato especificado e as salva no arquivo crontab. O serviço crond verificará periodicamente a lista de tarefas agendadas no arquivo crontab a cada minuto para executar a tarefa.

2.2. Classificação das tarefas agendadas do Linux

O agendamento de tarefas em sistemas Linux é dividido em duas categorias: agendamento de tarefas do sistema e agendamento de tarefas do usuário .

Agendamento de tarefas do sistema : trabalho que o sistema realiza periodicamente, como gravação de dados armazenados em cache no disco rígido, limpeza de log, etc. Existe um arquivo crontab no diretório /etc, que é o arquivo de configuração para agendamento de tarefas do sistema.

/etc/crontabO arquivo inclui as seguintes linhas:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 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

Agendamento de tarefas do usuário : tarefas definidas pelo usuário a serem executadas regularmente. Os usuários podem usar a ferramenta crontab para personalizar suas próprias tarefas agendadas. Todos os arquivos crontab definidos pelo usuário são salvos no diretório /var/spool/cron. O nome do arquivo é consistente com o nome do usuário. Por exemplo, se eu configurar uma tarefa agendada como usuário root, o arquivo crontab correspondente será /var/spool/cron/root.

O comando crontab permite aos usuários enviar, editar ou excluir trabalhos correspondentes. Cada usuário pode ter um arquivo crontab para salvar informações de agendamento. Os administradores do sistema podem desativá-los ou permiti-los por meio dos arquivos cron.deny e cron.allow.

/etc/cron.deny     该文件中所列用户不允许使用crontab命令
/etc/cron.allow    该文件中所列用户允许使用crontab命令
/var/spool/cron/   所有用户crontab文件存放的目录,以用户名命名

Resumo: O arquivo crontab de tarefas agendadas no nível do sistema é /etc/crontab. O arquivo crontab de tarefas agendadas definidas pelo usuário é salvo no diretório /var/spool/cron/ e o nome é consistente com o nome do usuário.

3. Instale o crontab

1. Verifique se o serviço crond está instalado no sistema

service crond status

Insira a descrição da imagem aqui

2.Instalação

yum -y install vixie-cron
yum -y install crontabs

Nota:
O pacote vixie-cron é o programa principal do cron;
o pacote crontabs é um programa usado para instalar, desinstalar ou listar tabelas usadas para conduzir o daemon cron.

3. Iniciar o serviço
cron é um serviço integrado do Linux, mas não inicia automaticamente. Você pode usar os seguintes métodos para iniciar e encerrar o serviço:

service crond start     //启动服务
service crond stop      //关闭服务
service crond restart   //重启服务
service crond reload    //重新载入配置
service crond status    //查看crontab服务状态

4. Configure a inicialização automática na inicialização

ntsysv #查看crontab服务是否已设置为开机启动
chkconfig –level 35 crond on #加入开机自动启动
chkconfig –list crond //开机级别的crond服务运行情况 ,2、3、4、5级别开机会自动启动crond服务
chkconfig crond off//取消开机自动启动crond服务:

4. Uso de crontab

4.1. Sintaxe do crontab

 crontab [options] file
 crontab [options]
 crontab -n [hostname]

Opções comuns:

Opções Função
-você usuário Usado para definir o serviço crontab de um determinado usuário. Por exemplo, -u test significa definir o serviço crontab do usuário de teste. Esta opção geralmente é apenas o usuário root tem permissão para executar.
-e Edite o conteúdo do arquivo crontab de um usuário. Se nenhum usuário for especificado, isso significa editar o arquivo crontab do usuário atual.
-eu Exibe o conteúdo do arquivo crontab de um usuário.Se nenhum usuário for especificado,ele exibe o conteúdo do arquivo crontab do usuário atual.
-r Exclua o arquivo crontab de um usuário de /var/spool/cron. Se nenhum usuário for especificado, o arquivo crontab do usuário atual será excluído por padrão.
-eu Ao excluir o arquivo crontab do usuário, forneça um prompt de confirmação
语法:
crontab [-u username] [-l|-e|-r]

示例:
# 用root用户执行以下命令,给test用户创建定时任务
crontab -u test -e

# root用户要查看自己的详细crond服务内容
命令:crontab -u root -l

Nota: No comando crontab [option] file, file refere-se ao nome do arquivo de comando, o que significa que o arquivo é usado como o arquivo da lista de tarefas do crontab e carregado no crontab. Se o nome do arquivo não for especificado na linha de comando , este comando aceitará o padrão Digite os comandos digitados no teclado e digite-os no crontab, por exemplo: crontab -u test /root/jobs.txt significa carregar o crontab com a lista de tarefas no arquivo /root/jobs.txt .

4.2. Configurações de tarefas agendadas

1. Digite diretamente o comando crontab -e ou edite o arquivo /etc/crontab para definir diretamente a tarefa agendada.

crontab -e   //若命令是root用户执行,建议直接使用编辑/etc/crontab的方式
或者
vi /etc/crontab

Nota: crontab -e entrará no modo de edição.Quando o formato do comando inserido estiver correto, ele será salvo no diretório /var/spool/cron e nomeado após o usuário atual;

Insira a descrição da imagem aqui

Aqui explicamos o modo de agendamento de tarefas do sistema, ou seja, editar o arquivo /etc/crontab

1. 输入 vi /etc/crontab
2. 按下 i 键进入到编辑模式
3. 输入定时命令 (文件路径必须是绝对路径)
0 */1 * * * /home/work/start-service.sh
4. 然后按下 esc 退出编辑模式
5. 按下 shift+: 输入 wq 退出 crontab
6. 输入以下命令使任务生效
crontab /etc/crontab
7. 查看当前系统中的定时任务列表
crontab -l

Insira a descrição da imagem aqui

4.3. Formato de tarefa agendada

Vemos que /etc/crontabo arquivo tem o seguinte formato

# 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
 分  时 日 月 周 [用户名]    <要执行的命令>
分钟 小时 日期 月份 星期 (crontab表达式)
user-name 指的是执行这个定时任务的用户
command to be executed : 运行的命令

示例:每分钟以root用户执行/root/1.sh脚本
* * * * * root bash /root/1.sh

O significado de cada campo é o seguinte:

  • minuto: representa o minuto, que pode ser qualquer número inteiro de 0 a 59.
  • hora: representa a hora, que pode ser qualquer número inteiro de 0 a 23.
  • dia: representa a data, que pode ser qualquer número inteiro de 1 a 31.
  • mês: representa o mês, que pode ser qualquer número inteiro de 1 a 12.
  • semana: Indica o dia da semana, que pode ser qualquer número inteiro de 0 a 7, onde 0 ou 7 representa domingo.
  • comando: O comando a ser executado pode ser um comando do sistema ou um arquivo de script escrito por você.

Em cada um dos campos acima, você também pode usar os seguintes caracteres especiais:

  • Asterisco (*): representa todos os valores possíveis, por exemplo, se o campo mês for um asterisco, significa que a operação do comando será executada todos os meses após atendidas as restrições dos demais campos.
  • Vírgula (,): Você pode especificar um intervalo de lista com valores separados por vírgula, por exemplo, "1,2,5,7,8,9"
  • Barra central (-): você pode usar uma barra central entre números inteiros para representar um intervalo de números inteiros, por exemplo, "2-6" significa "2,3,4,5,6"
  • Barra (/): Você pode usar barra para especificar a frequência do intervalo de tempo, por exemplo, "0-23/2" significa executar a cada duas horas. Ao mesmo tempo, barras podem ser usadas junto com asteriscos, como * / 10. Se usado no campo minuto, significa que será executado a cada dez minutos.

Nota: Existe apenas "caminho absoluto" no comando crontab e não existe caminho relativo, então você precisa escrever o caminho absoluto para executar qualquer comando.

4.4 Verificação online da expressão crontab

https://tool.lu/crontab
Comando crontab do Linux | Tutorial para iniciantes

5. Exemplos

Caso 1: necessário para executar o script 1.sh como usuário root uma vez a cada minuto

* * * * * root /bin/bash /root/1.sh

Caso 2: É necessário executar o comando touch /tmp/testfile.txt uma vez por dia às 3h.

0 3 * * * /usr/bin/touch /tmp/testfile.txt

Caso 3: deve ser executado uma vez por dia às 7, 9 e 12h

0 7,9,12 * * *  /app/Projects/bin/start.sh -config=/data/application.yml >> /data/info.log 2>&1

Caso 4: Deve ser executado a cada 2 minutos às 7h todos os dias (executado aos 0 minutos)

*/7 7 * * *  echo "Have a good dream" >> /tmp/test.txt

Caso 5: Deve ser executado na segunda-feira, dia 1º de cada mês

0 0 1 * 1

Caso 6: Deve ser executado a cada 5 minutos, das 8h às 11h, todos os dias

*/5 8,9,10,11 * * *
或者

*/5 8-11 * * *

Caso 7: É necessário executar a cada 5 minutos, das 21h00 às 3h00, todos os dias.

*/5 21-3 * * *
或者

*/5 21-23,0-3 * * *

Caso 8: É necessário iniciar às 7 horas todos os dias e executá-lo a cada dois minutos

*/2 7-23 * * *

Caso 9: É necessário iniciar às 7 horas todos os dias e executá-lo a cada dois minutos a cada duas horas.

*/2 7-23/2 * * *

Caso 10: Obrigatório executar uma vez às 19h e às 14h nos dias úteis (1-5)

0 7,14 * * 1,2,3,4,5

6. Registro de tarefas agendadas

Quando ocorre um erro em uma tarefa agendada e você precisa solucionar o erro, você precisa acessar o arquivo de log da tarefa agendada para consultar a causa do erro.

/var/log/cron : 可以查看到执行那些定时任务
/var/log/messages: 记录系统操作的日志,(例如:用户登录)

Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/weixin_49114503/article/details/133083835
Recomendado
Clasificación