Usando temporizadores Systemd como um substituto para tarefas Cron
Como um usuário Linux, você provavelmente está familiarizado com o cron. Ele tem funcionado como o agendador de tarefas baseado em tempo do Unix por muitos anos. Agora, muitos usuários estão usando timers Systemd para substituir o domínio do cron. Este artigo discutirá os princípios básicos de como configurar seu próprio timer systemd e garantir que ele esteja funcionando corretamente em seu sistema.
Por que usar temporizadores Systemd em vez de Cron?
Um dos maiores pontos de venda do Systemd Timers é que ele é totalmente integrado ao ecossistema Systemd. Isso significa que é muito fácil agendar e vincular várias unidades de serviço Systemd, facilitando a automatização de tarefas em comparação a um daemon cron tradicional.
Outra vantagem dos Systemd Timers sobre o Cron é que eles fornecem um controle mais detalhado sobre como disparar seus trabalhos agendados. Por exemplo, os Systemd Timers têm uma OnBootSec
variável, que permite que você adie sua unidade de serviço até que um certo tempo passe após uma inicialização bem-sucedida.
Por fim, os Systemd Timers também são incrivelmente precisos em comparação a um daemon cron padrão. Por padrão, ele pode rastrear e executar trabalhos até um microssegundo usando sua AccuracySec
variável. Isso é incrivelmente útil se você estiver executando um computador que requer tempos exatos para suas tarefas agendadas.
Instalando temporizadores Systemd
Timers são uma função interna do Systemd. Isso significa que se você estiver usando o Systemd como seu daemon init, como é o caso de distros Linux populares como Arch, Fedora e Ubuntu, sua máquina já está aproveitando esse recurso em alguns de seus processos de sistema.
Para verificar se sua distribuição está executando o Systemd, você pode executar o seguinte comando:
Isso listará todas as unidades, dispositivos e temporizadores do Systemd que estão em execução no seu sistema.
Listar temporizadores existentes
A maneira mais fácil de verificar se um timer está em execução na sua conta de usuário atual é com o seguinte comando:
Você também pode usar o --all
sinalizador para verificar cada temporizador no sistema, incluindo os inativos:
Isso imprimirá a data e a hora em que cada timer será ativado, a contagem regressiva até aquele ponto, quanto tempo se passou desde a última execução, o nome da unidade do próprio timer e o serviço que cada unidade do timer ativa.
Criando um novo serviço e temporizador
O primeiro passo para criar um timer Systemd é criar ou encontrar um serviço existente para anexá-lo. Isso ocorre porque cada timer precisa ser anexado a uma unidade de serviço pai. Esta seção o guiará pelo processo de criação de um timer para um serviço Systemd personalizado.
Comece criando os arquivos em branco “.service” e “.timer” no seu diretório home:
Abra seu novo arquivo de serviço usando seu editor de texto favorito:
Cole o seguinte modelo dentro do seu novo arquivo de serviço:
Salve seu arquivo “.service” e abra seu arquivo “.timer” em branco usando o mesmo editor de texto:
Cole o seguinte bloco de código dentro do seu arquivo de timer:
Vá para a [Timer]
seção, então substitua o valor da OnCalendar
variável pela data e hora que você quer que sua unidade Systemd rode. No meu caso, eu quero que meu programa rode exatamente às 11:43 AM todos os dias.
Criando um cronômetro monotônico
Além de definir um timer que seja executado em uma data específica, também é possível criar um timer monotônico que seja executado em relação ao tempo de atividade atual do seu computador. Isso é útil se você estiver agendando uma tarefa em uma máquina que não esteja em execução constante, como em um desktop ou laptop.
Para começar, abra seu arquivo “.timer” e role para baixo até a [Timer]
seção.
Remova as variáveis OnCalendar
e Persistent
, então adicione OnBootSec
seguido por um intervalo de tempo para quando você quer executar seu arquivo unit. Por exemplo, defini-lo como “1hr” dirá ao Systemd para iniciar seu comando uma hora após seu computador inicializar com sucesso.
Adicione a OnUnitActiveSec
variável logo abaixo OnBootSec
e, em seguida, forneça o intervalo que você quer que seu timer execute continuamente após a inicialização do sistema. No meu caso, vou defini-lo como “30min”, pois quero que minha tarefa seja executada a cada 30 minutos após sua execução inicial.
Criando um temporizador transitório
Um dos benefícios do Systemd Timer ser profundamente integrado ao Systemd é que ele pode tirar vantagem dos outros programas adjacentes do daemon init. Por exemplo, é possível usar timers com Systemd-run para criar trabalhos transitórios únicos na sua máquina.
Para criar um temporizador temporário simples, cole a seguinte linha de código em uma sessão de terminal e substitua o valor da --on-calendar
variável pelo intervalo em que você deseja que seu comando seja executado:
Anexe o comando que você deseja executar no final da linha e pressione Enterpara agendá-lo.
Você também pode criar temporizadores monótonos temporários usando as variáveis --on-boot
e --on-unit-active
:
Confirme se seu timer temporário agora está na fila do agendador de tarefas do Systemd executando o seguinte comando:
Executando o Systemd Timer
Para executar seu novo Systemd Timer, você precisa ter certeza de que ele está carregado corretamente na sua sessão Systemd atual. Para isso, copie seu serviço personalizado e o arquivo timer para o diretório de serviços do seu Systemd:
Recarregue a configuração atual do daemon init:
Ative o serviço e o timer que você criou usando systemctl
:
Verifique se você carregou seu novo timer corretamente executando: sudo systemctl status my-new-timer.timer
em uma nova sessão de terminal. Neste caso, você pode ver que meu timer agora está agendado e preparado para o sistema executar.
Aprender como agendar tarefas usando Systemd Timers é apenas uma parte de entender como sua máquina Linux funciona por baixo dos panos. Mergulhe mais fundo nos detalhes internos deste maravilhoso SO olhando nosso artigo de comparação sobre Grub e Systemd-boot.
Crédito da imagem: Alexandr Podvalny via Unsplash . Todas as alterações e capturas de tela por Ramces Red.
Deixe um comentário