Diretório de artigos
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.
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/crontab
O 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
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;
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
4.3. Formato de tarefa agendada
Vemos que /etc/crontab
o 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: 记录系统操作的日志,(例如:用户登录)