O agendador de tarefas do Linux e o 'cron', um agendador de tarefas baseado em tempo, são comumente usados no agendamento de tarefas do Linux. Se você:
- Quer aprender a agendar tarefas no Linux? Aprenda sobre o Agendador de Tarefas do Linux e o cron .
- Caso não tenha certeza se o agendador do Linux é suficiente para o seu caso de uso, aprenda sobre os diferentes agendadores de tarefas .
- Se você trabalha para uma empresa que atualmente usa o Agendador de Tarefas do Linux e está considerando atualizar para um agendador de tarefas de nível empresarial, considere agendadores de tarefas com recursos avançados.
Recurso | SFC* | Cronos | Agendadores de tarefas empresariais** |
|---|---|---|---|
Foco | Agendamento de processos dentro do kernel do Linux | Agendamento de tarefas baseado em tempo em sistemas do tipo Unix | Agendamento e automação de tarefas em diferentes sistemas |
Propósito | Distribui o tempo da CPU entre os processos em execução. | Executa comandos ou scripts em horários agendados. | Gerencia e automatiza fluxos de trabalho complexos. |
Ambiente | Nível do kernel em sistemas Linux | Nível de usuário em sistemas operacionais do tipo Unix | Nível empresarial, multiplataforma |
Uso | Gerenciamento de processos do sistema e agendamento de threads | Tarefas rotineiras como backups, atualizações, etc. | Automação de processos de negócios, tarefas de TI, etc. |
Personalização | Limitado a parâmetros do kernel e ajustes do sistema. | Arquivo Crontab para agendamento de tarefas | Altamente personalizável com scripts, condições e gatilhos. |
interface do usuário | Command-linha e arquivos de configuração do sistema | Interface de linha de comando do Crontab | Interface gráfica do usuário (GUI) e interface de linha de comando. |
Em tempo real | Não foi projetado para agendamento em tempo real. | Sem capacidades de tempo real | Suporta monitoramento e ajustes em tempo real. |
Escalabilidade | Escalável dentro do escopo do sistema operacional. | Escalabilidade limitada | Altamente escalável para uso empresarial. |
* Agendador Completamente Justo (CFS) do Linux
** Os agendadores de tarefas empresariais incluem Stonebranch , ActiveBatch , RunMyJobs e JAMS Scheduler .
O que é o Agendador do Linux?
Um agendador de tarefas do Linux é uma ferramenta usada em sistemas Linux para automatizar tarefas rotineiras e agendar trabalhos sem intervenção manual. Ele gerencia as tarefas agendadas, garantindo que sejam executadas em horários predefinidos.
O CFS (Completely Fair Scheduler) é uma implementação específica do agendador do Linux, introduzida na versão 2.6.23 do kernel. O CFS visa proporcionar equidade, alocando o tempo de CPU proporcionalmente entre as tarefas com base na prioridade e no tempo de execução.
O CFS é um tipo de agendador do Linux , especificamente, é o algoritmo de agendamento padrão atualmente utilizado na estrutura mais ampla do Agendador do Linux.
EEVDF (Earliest Eligible Virtual Deadline First) é a implementação moderna do escalonador do Linux, introduzida na versão 6.6 do kernel (outubro de 2023) para substituir o antigo CFS. Embora o EEVDF mantenha a "justiça" de seu antecessor, ele adiciona um mecanismo específico de "prazo" projetado para lidar muito melhor com tarefas sensíveis à latência.
O EEVDF agora é o algoritmo de agendamento padrão usado na estrutura mais ampla do Agendador do Linux, sucedendo o CFS, que serviu como padrão desde a versão 2.6.23.
Os principais aspectos do Agendador do Linux incluem:
- Priorização de processos: O agendador prioriza os processos com base em fatores como seu nível de prioridade e a quantidade de tempo de CPU que consumiram. Isso garante um equilíbrio entre processos em primeiro plano (interativos) e em segundo plano (em lote).
- Multitarefa preemptiva: O Linux emprega multitarefa preemptiva, onde o agendador de chamadas do sistema pode interromper um processo em execução para dar tempo a outro processo. Essa capacidade é crucial para manter a capacidade de resposta do sistema, especialmente em um ambiente multiusuário.
- Diferentes Algoritmos de Escalonamento: Ao longo dos anos, diferentes versões do kernel Linux utilizaram vários algoritmos de escalonamento. O algoritmo mais conhecido é o Completely Fair Scheduler (CFS), introduzido no Linux 2.6.23. O CFS visa alocar tempo de CPU aos processos de forma que cada um receba uma parcela justa do tempo de CPU.
- Balanceamento de carga: Em sistemas com múltiplos núcleos, o agendador também gerencia o balanceamento de carga, distribuindo os processos entre diferentes núcleos do processador para otimizar o desempenho e a eficiência energética.
- Agendamento em tempo real: O Linux também oferece suporte a políticas de agendamento em tempo real (como FIFO e round-robin), que são cruciais para tarefas sensíveis ao tempo, onde a previsibilidade do tempo de execução do código é mais importante do que a taxa de transferência geral do sistema.
- Cgroups e Grupos de Controle: Os sistemas Linux modernos usam grupos de controle (cgroups) para agrupar processos e aplicar políticas como limites de tempo de CPU ou prioridades a todo o grupo, dando aos administradores mais controle sobre o agendamento de processos e a alocação de recursos.
Agendador Linux vs. Ferramentas de Agendamento de Tarefas
Ferramentas de agendamento de tarefas de nível empresarial permitem que as empresas lidem com fluxos de trabalho mais complexos do que um agendador básico como o cron ou o agendador do Linux. Essas ferramentas podem ser uma alternativa quando os usuários já não atendem às necessidades de seus agendadores atuais, como o Agendador do Linux, e buscam uma atualização.
Pode haver casos em que o Agendador do Linux, particularmente sua implementação como o Agendador Completamente Justo (CFS), e ferramentas de agendamento de tarefas de nível empresarial podem trabalhar em conjunto para garantir tanto a eficiência em nível de sistema quanto a automação em nível de fluxo de trabalho.
Agendador do Linux
Finalidade: O Agendador do Linux (como o CFS) é um componente de baixo nível do kernel responsável por decidir qual processo receberá tempo de CPU e quando. É parte integrante da funcionalidade principal do sistema operacional.
Objetivo: Gerencia a alocação de tempo da CPU entre todos os processos em execução em um sistema, garantindo distribuição justa, capacidade de resposta e utilização eficiente dos recursos da CPU.
Escopo: Opera no nível de processo ou thread dentro de um único sistema.
Ferramentas de agendamento de tarefas
Finalidade: As ferramentas de agendamento de tarefas são ferramentas de alto nível, geralmente orientadas a aplicações , projetadas para automatizar e agendar processos e tarefas de negócios.
Foco: Essas ferramentas gerenciam a execução de trabalhos em lote ou fluxos de trabalho, que podem envolver várias etapas, dependências e critérios de agendamento . Elas são usadas para orquestrar tarefas como backups de dados, geração de relatórios ou qualquer sequência complexa de operações em ambientes corporativos.
Âmbito de aplicação: Pode operar em múltiplos sistemas e plataformas , orquestrando tarefas que podem envolver diversas aplicações ou serviços diferentes.
Qual a diferença entre 'Cron' e o agendador CFS do Linux?
O CFS e o 'cron' são partes integrantes dos sistemas Linux, mas servem a propósitos diferentes. Essencialmente, o CFS distribui o tempo da CPU de forma justa entre os processos em execução, enquanto o cron define quando executar tarefas específicas com base no relógio/calendário.
Principais diferenças
- Funcionalidade e função: O CFS é um agendador de processos que gerencia como os processos compartilham o tempo da CPU, enquanto o cron é um agendador de tarefas que executa tarefas em horários agendados.
- Nível de operação : O CFS opera no nível do kernel, lidando com o agendamento de processos em tempo real, enquanto o cron opera em um nível superior, lidando com o agendamento de tarefas que não são necessariamente executadas continuamente.
- Contínuo vs. Discreto : O CFS (Completely File System) funciona continuamente enquanto o sistema estiver em execução, gerenciando a alocação de CPU dinamicamente. Em contraste, o cron executa tarefas em horários específicos e predefinidos.
Ferramentas como o Stonebranch também podem ser alternativas ao cron , especialmente para empresas de grande e médio porte com requisitos complexos de agendamento em tempo real. Embora ambos sejam usados para agendamento de tarefas, eles diferem significativamente em recursos, capacidades e casos de uso. Para mais informações sobre este tópico, consulte Principais Alternativas ao Cron .
Como automatizar cargas de trabalho com o Agendador do Linux?
Automatizar cargas de trabalho com o Agendador do Linux não se resume a programar o próprio agendador; em vez disso, envolve o uso de diversas ferramentas e técnicas do Linux que interagem com o agendador para gerenciar e automatizar tarefas. Aqui estão algumas maneiras de automatizar o agendamento de tarefas e gerenciar cargas de trabalho de forma eficaz em um ambiente Linux:
- Tarefas Cron: Talvez o método mais comum para automatizar tarefas no Linux seja por meio de tarefas cron. O cron é um agendador de tarefas baseado em tempo, presente em sistemas operacionais do tipo Unix. Os usuários podem agendar tarefas (comandos ou scripts) para serem executadas periodicamente em horários, datas ou intervalos fixos. Isso não manipula diretamente o agendador, mas agenda tarefas no nível do usuário.
- Nice e Renice Commands: Você pode usar os comandos nice e renice para influenciar a prioridade de um processo. Isso não agenda uma tarefa em si, mas altera a forma como o agendador trata um processo, o que pode fazer parte de uma estratégia de automação para garantir que tarefas críticas recebam mais tempo de CPU.
- Grupos de controle (cgroups): Os cgroups permitem alocar recursos, como tempo de CPU, memória do sistema, largura de banda de rede ou combinações desses recursos, entre grupos de tarefas definidos pelo usuário. Com os cgroups, você pode garantir que determinados aplicativos ou serviços recebam os recursos necessários como parte de um fluxo de trabalho automatizado.
- Systemd e Arquivos de Unidade: O Systemd, o sistema init e gerenciador de sistemas da maioria das distribuições Linux, permite um agendamento e gerenciamento mais avançados de serviços. Ele utiliza arquivos de unidade para descrever como os serviços devem iniciar, parar e operar. Você pode configurar o Systemd para iniciar serviços automaticamente na inicialização do sistema, após a inicialização de outros serviços específicos ou em um cronograma definido.
- Ferramentas de Script e Automação: Scripts em bash ou outras linguagens de shell, juntamente com ferramentas de automação como ActiveBatch, Ansible, Puppet ou Chef, podem ser usados para automatizar tarefas. Embora esses scripts e ferramentas não interajam diretamente com o Agendador do Linux, eles podem ser usados para criar fluxos de trabalho complexos e gerenciar quando e como diferentes processos são executados.
- Ajuste do Kernel: Para usuários avançados, o ajuste de parâmetros do kernel via sysctl ou outras interfaces do kernel pode influenciar o comportamento do agendador. Essa é uma abordagem mais sofisticada e requer conhecimento aprofundado do kernel Linux.
- Linux em tempo real: Para cargas de trabalho que exigem restrições rigorosas de temporização e agendamento, o uso de um kernel Linux em tempo real pode ser necessário. Extensões de tempo real para o kernel Linux podem proporcionar um comportamento de agendamento mais determinístico e previsível.
Quais são as alternativas ao agendador do Linux?
Existem diversas alternativas ao agendador padrão do kernel Linux (principalmente o algoritmo de agendamento Completely Fair Scheduler, ou CFS). Essas alternativas podem ser agendadores de tarefas de terceiros de nível empresarial para casos em que as empresas superaram as capacidades do agendador de tarefas do Linux, outros agendadores dentro do kernel Linux ou diferentes abordagens de agendamento em outros sistemas operacionais. Aqui estão alguns exemplos notáveis:
Ferramentas de agendamento de tarefas de terceiros com amplas funcionalidades
- Stonebranch Universal Automation Center (UAC) : O Stonebranch UAC serve como uma plataforma de automação única para gerenciar processos de carga de trabalho em ambientes corporativos, oferecendo uma interface unificada baseada na web, mecanismo de execução distribuída, visualização de carga de trabalho e recursos integrados de disponibilidade e recuperação de desastres.
- ActiveBatch: O ActiveBatch é uma solução de automação de cargas de trabalho e agendamento de tarefas que vai além das capacidades de um agendador básico do Linux. Ele foi projetado para fornecer uma plataforma centralizada para automatizar e gerenciar fluxos de trabalho complexos em diversos ambientes, incluindo Windows, Linux, Unix e outros.
- Agendador JAMS: O JAMS centraliza o gerenciamento de processos em lote do Linux e UNIX em uma única interface. Ele oferece recursos robustos de agendamento de tarefas e automação de cargas de trabalho, incluindo agendamento baseado em eventos e gatilhos. Também fornece um Método de Execução do Airflow para monitorar DAGs do Airflow e um Método de Execução do Azure Blob para tarefas de armazenamento em nuvem do Azure. Isso traz flexibilidade moderna ao agendamento de tarefas Cron tradicional em ambientes Linux e de nuvem.
Alternativas dentro do Linux
- Agendador O(1): Antes do CFS, o kernel do Linux usava o agendador O(1), projetado para operação em tempo constante, independentemente do número de tarefas. Era o agendador padrão nos kernels Linux 2.6 anteriores à versão 2.6.23.
- Brain Fuck Scheduler (BFS): O BFS, criado por Con Kolivas, visa melhorar a capacidade de resposta do sistema, especialmente em computadores desktop com menos de 16 núcleos. É mais simples que o CFS e pode ser vantajoso para sistemas de usuário único.
- MuQSS (Multiple Queue Skiplist Scheduler): Também desenvolvido por Con Kolivas como sucessor do BFS, o MuQSS visa melhorar o desempenho em sistemas desktop. Ele substitui a estrutura de fila de execução do CFS por uma lista de saltos (skiplist).
- Agendadores de Tempo Real (RT): O Linux oferece políticas de agendamento em tempo real, como FIFO (First In, First Out) e round-robin, para tarefas onde a consistência temporal é mais crítica do que a taxa de transferência geral do sistema. Esses agendadores são frequentemente usados em conjunto com o patch PREEMPT_RT para sistemas Linux de tempo real.
- Agendadores de prazo: Esses agendadores, como o SCHED_DEADLINE (introduzido no kernel Linux 3.14), são projetados para tarefas com restrições de tempo específicas. Eles agendam tarefas com base em prazos definidos pela aplicação.
Alternativas em outros sistemas operacionais
- Agendador do Windows NT: Utilizado no Windows Microsoft, é um agendador preemptivo baseado em prioridades, conhecido por seu foco na capacidade de resposta, especialmente nas versões do Windows voltadas para o consumidor.
- Agendador do macOS: O macOS utiliza uma combinação do agendamento tradicional baseado em Unix com extensões para melhorar a responsividade da interface gráfica, priorizando experiências de usuário fluidas em tarefas interativas.
- Agendador Solaris: O agendador usado no Solaris (e historicamente no Sun Solaris) inclui suporte para agendamento em tempo real e agendamento compartilhado, oferecendo flexibilidade para uma variedade de aplicações, desde desktops até servidores.
- Agendadores BSD: As variantes do BSD (como FreeBSD e OpenBSD) usam agendadores diferentes. O FreeBSD, por exemplo, usa o agendador ULE (Unix-Like Scheduler), que é otimizado para desempenho em sistemas multi-core.
- Agendadores de RTOS: Sistemas Operacionais de Tempo Real (RTOS), como RTLinux, VxWorks ou QNX, utilizam agendadores otimizados para desempenho em tempo real, oferecendo um comportamento de agendamento previsível e determinístico.
Leitura complementar
Perguntas frequentes (FAQs) sobre o agendador de tarefas do Linux
Perguntas frequentes
Os cron jobs são tarefas agendadas que são executadas automaticamente pelo serviço cron (daemon cron) em sistemas Linux. Eles são ideais para tarefas repetitivas, como manutenção do sistema, backups ou processamento de dados.
As tarefas agendadas (cron jobs) são definidas usando o arquivo crontab do usuário, gerenciado pelo comando crontab (crontab -e). Cada entrada no crontab especifica um horário de execução agendado e o comando ou caminho para o script.sh a ser executado.
O arquivo crontab de cada usuário está localizado em /var/spool/cron/crontabs/, mas é recomendável editar este arquivo usando o utilitário de linha de comando crontab (crontab -e) para evitar possíveis riscos de segurança e problemas com permissões de acesso.
O daemon cron é um serviço em segundo plano nos sistemas Linux que lê o arquivo de configuração do cron (entradas crontab) e executa tarefas agendadas em horários específicos sem intervenção manual.
As tarefas agendadas são gerenciadas por meio do comando crontab, permitindo que os usuários criem, editem e visualizem entradas de tarefas cron. O arquivo crontab define parâmetros de agendamento de tarefas, como minuto, hora, dia do mês, mês e dia da semana.
As variáveis de ambiente em um arquivo crontab definem configurações como PATH, SHELL ou variáveis personalizadas necessárias para que as tarefas sejam executadas corretamente. Elas são essenciais para garantir que os scripts sejam executados corretamente no ambiente agendado.
Sim, os cron jobs podem agendar tarefas únicas especificando um horário agendado específico. Após a execução, os usuários geralmente removem ou comentam a entrada do crontab para evitar que a tarefa seja executada novamente.
Tarefas repetitivas ocorrem regularmente em intervalos definidos (por exemplo, backups diários). Trabalhos recorrentes seguem uma programação específica, como a manutenção semanal do sistema aos domingos.
Os resultados das tarefas cron e os logs do sistema podem ser visualizados nos logs do sistema (/var/log/syslog ou /var/log/cron). Os usuários também podem direcionar a saída das tarefas cron para um arquivo de log para facilitar a solução de problemas.
Sim, os cron jobs podem automatizar tarefas como a transferência gerenciada de arquivos, agendando scripts que lidam com transferências de arquivos de forma segura e regular, sem intervenção manual.
Sim, tarefas cron configuradas incorretamente podem representar riscos de segurança, como permissões de acesso não autorizadas. Sempre proteja seus arquivos crontab e assegure-se de que as permissões de acesso adequadas sejam mantidas para mitigar esses riscos.
Seja o primeiro a comentar
Seu endereço de e-mail não será publicado. Todos os campos são obrigatórios.