Skip to content
mobius1qwe edited this page Nov 6, 2026 · 1 revision

Home > Colocar no ar > Agendador 🚧

Tarefas agendadas no servidor

Important

Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.

Vale para a 2.0 · Delphi XE em diante e Lazarus/FPC 3.2 em diante · Nível: básico

Em uma frase: o TRALScheduler roda tarefas por expressão cron ou a cada N milissegundos, cada execução na sua thread, e começa e para junto com o servidor.

Você vai precisar: o pacote RALHostingPackage.

uses RALScheduler;

Agenda := TRALScheduler.Create(Self);
Agenda.Jobs.AddJob('limpeza', '0 3 * * *', Limpar);        // todo dia às 03:00
Agenda.Jobs.AddInterval('pulso', 60000, Pulso).RunOnStart := True;
Agenda.Server := Servidor;    // liga e desliga com o servidor

procedure TForm1.Limpar(AJob: TRALScheduledJob);
begin
  while not Terminou and not AJob.Stopping do   // Stopping: o servidor está parando
    ...
end;

Cron

5 campos (minuto, hora, dia, mês, dia da semana) ou 6 com os segundos na frente; *, listas (1,15), faixas (9-17), passos (*/15, 9-17/2), nomes (JAN, MON-FRI), domingo é 0 ou 7. Apelidos: @yearly, @monthly, @weekly, @daily, @hourly, @reboot (uma vez, ao ligar). Como no cron do POSIX, se dia e dia da semana forem restritos, vale qualquer um dos dois.

expressão quando
*/15 * * * * a cada 15 minutos
0 3 * * 1 segunda às 03:00
30 9-17/2 * * MON-FRI 09:30, 11:30... 17:30 nos dias úteis
0 0 29 2 * 29 de fevereiro (só nos anos bissextos)
*/20 * * * * * a cada 20 segundos

TRALCronExpression.Create(texto).NextAfter(Now) dá a próxima vez; TRALCronExpression.IsValid(texto) só confere. Uma expressão inválida levanta ERALException: [RAL 6404] (número de campos), 6405 (valor fora da faixa), 6406 (passo), 6407 (faixa invertida).

O job

propriedade
AllowOverlap False (padrão): se a execução anterior ainda roda, esta é pulada
RunOnStart também roda ao ligar
Enabled
NextRun, LastRun, RunCount, Running só leitura
LastError, LastErrorTime a última exceção (OnError do agendador avisa na hora)

Parar o servidor (inclusive Shutdown) espera as execuções em curso. Para mostrar o agendador no /health/ready, ligue Agenda.HealthCheck a um check do plugin de saúde: um job cuja última execução falhou deixa o servidor "não pronto".

Veja também

Clone this wiki locally