0 votos positivos 0 votos negativos
372 visitas
em Debian GNU/Linux por monitor (11,3K pontos)

Boa tarde a todos!

No Windows existe um recurso chamado "Agendados de tarefas", onde programar ele para executar alguma coisa em um determinado horário.

Gostaria de saber se existe um "agendados de tarefas" ou mesmo, alguma forma para agendar ele para executar algum arquivo .SH ou programa em um determinado horário?

Debian 10.7.0 (Stable)

Desde já agradeço a atenção

1 Resposta

1 voto positivo 0 votos negativos
por monitor (15,8K pontos)
selecionada por
 
Melhor resposta

Você pode fazer isso no Debian (ou em qualquer sistema unix-like) com o cron, que é um programa que roda nos bastidores do sistema (o que nós chamamos de daemon) e cuja finalidade é executar comandos agendados.

Para interagir com ele, existe um arquivo chamado crontab (de cron table), que é basicamente uma tabela em texto puro contendo todas as tarefas agendadas (chamadas de jobs, ou cronjobs). O sistema já vem com uma tabela dessas configurada para realizar todas as tarefas periódicas que precisem ser executadas globalmente. Mas você, como usuário, também tem acesso à criação da sua própria tabela, e isso é feito através do comando de terminal que tem o mesmo nome do arquivo: o comando crontab.

De modo geral, para criar uma entrada na tabela apenas para o seu usuário, basta executar o comando...

:~$ crontab -e

Este é o comando para editar a tabela de agendamentos do seu usuário. Se não existir, ela será criada e você terá a opção de escolher o editor de textos da sua preferência.

No Debian, como a própria mensagem da imagem indica, caso você se arrependa da escolha que fez, basta executar o comando select-editor no terminal que o menu com as opções será exibido novamente.

Quando você cria a sua crontab, o seu arquivo contém apenas algumas informações introdutórias. Você pode lê-las e apagá-las se quiser.

Para entrar com um novo agendamento na sua crontab, digite uma linha contendo as seguintes informações neste formato:

┌───────────── minuto (0 - 59)
│ ┌───────────── hora (0 - 23)
│ │ ┌───────────── dia do mês (1 - 31)
│ │ │ ┌───────────── mês (1 - 12)
│ │ │ │ ┌───────────── dia da semana (0 - 6) (Domingo a Sábado)
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
* * * * * comando a ser executado

Um detalhe importante, é que todos os valores aqui se referem a datas e horas marcadas, como as horas e minutos de um relógio ou os dias e meses do calendário, e não a durações ou intervalos. Então, se eu escrevo "5" no primeiro campo, eu estou me referindo ao minuto 5 do relógio, e não a um intervalo regular de 5 minutos.

A melhor forma de entender a sintaxe do crontab é através de alguns exemplos práticos.

1. Executar uma tarefa todos os dias num dado horário

15 14 * * * comando a ser executado

Isso irá agendar a execução de um comando todos os dias às 14:15h. Outro exemplo:

0 7 * * * comando a ser executado

O comando será executado todos os dias às 7h da manhã.

Mas, cuidado! se você puser um asterisco no primeiro campo em vez do "0" quando quiser se referir ao minuto zero de cada hora, o cron irá entender que o comando deverá ser executado todos os minutos da hora indicada!

2. Executar uma tarefa várias vezes por dia

0 8,15 * * * comando a ser executado

O comando será executado às 8h e às 15h.

0 2,8,14,20 * * * comando a ser executado

O comando será executado quatro vezes ao dia, às 2h, 8h, 14h e 20h. Neste caso, estamos falando de um intervalo constante de seis horas das 2h da madrugada às 20h, o que poderia ser melhor descrito com a opção de indicar "passos" (steps) e "intervalos", assim...

0 2-20/6 * * * comando a ser executado

Neste exemplo, o resultado seria o mesmo de antes, mas nós representamos o intervalo como 2-20 e o passo de seis horas como /6.

3. Executar um comando todos os minutos de todas as horas do dia

* * * * * comando a ser executado

Obviamente, isso não parece prático, mas pode ser uma boa forma de testar os comandos que você deseja que o cron execute.

4. Executar comandos numa determinada hora de segunda à sexta

30 17 * * 1-5 comando a ser executado

Aqui, o comando será executado às 17:30h todos os dias de segunda à sexta. Repare que nós utilizamos a representação de intervalos no campo do dia da semana, onde "1" é segunda e "5" é sexta.

5. Executar um comando a cada "n" dias

0 0 * * */2 comando a ser executado

O comando será executado à meia-noite em dias alternados começando no domingo.

0 17 * * 1/2 comando a ser executado

O comando será executado às 17h em dias alternados de segunda a domingo.

Outras ideias

Os exemplos acima são suficientes para deduzir as demais possibilidades da sintaxe do crontab. Mas, às vezes nós podemos enfrentar algumas situações mais peculiares onde a sintaxe sozinha não irá resolver. Nesses casos, nós podemos simplesmente recorrer ao campo do comando a ser executado para realizar algumas filtragens, como veremos no próximo exemplo.

6. Executar um comando na primeira quarta-feira de cada mês

A ideia aqui é utilizar o comando test em conjunto com o agendamento para verificar se a quarta-feira em questão (dia da semana 3) corresponde a um dia do mês é menor do que o dia 7. O teste seria feito assim:

[ $(date +d%) -le 7 ] && comando a ser executado

A parte dos colchetes ([...]) é o comando test. Nele, nós pedimos a data de hoje (utilitário date) formatada de modo a retornar apenas o dia do mês (+d%). Em seguida, o dia retornado é testado para ver se é menor ou igual a "7" (-le). Caso seja verdadeiro, tudo que vier depois será executado (&& comando a ser executado).

Colocando tudo na nossa crontab...

0 12 * * 3 [ $(date +d%) -le 7 ] && comando a ser executado

O comando será executado ao meio-dia de uma quarta se o dia do mês for menor ou igual a 7.

7. Executar vários comandos numa única linha

20 11 * * * comando1; comando2; ... comando n

Ou assim, se cada comando tiver a sua execução condicionada ao sucesso do comando anterior...

20 11 * * * comando1 && comando2 && ... comando n

# Outras ações...

Ver a sua crontab atual

:~$ crontab -l

Salvar a sua crontab em um arquivo

:~$ crontab -l > minha-crontab.txt

Restaurar a sua crontab a partir de um arquivo

:~$ crontab /caminho/minha-crontab.txt

Remover sua crontab

:~$ crontab -r
por monitor (11,3K pontos)
0 0
Muito obrigado pela resposta Blau!

Consegui agendar a executar de um programa perfeitamente aqui! :D
Seja bem-vindo(a) à comunidade debxp, onde você pode fazer perguntas e receber respostas de outros membros.
Atenção pessoal, esta plataforma não é um fórum, embora se pareça muito com um. Neste tipo de ferramenta, o objetivo é fazer e responder perguntas que possam resultar em material de consulta para outras pessoas que tenham as mesmas dúvidas e dificuldades. Portanto, não há sentido em utilizarmos o Ask para socialização, para emitir opiniões pessoais ou para perguntas do tipo "quem usa isso ou aquilo". Espero que compreendam o nosso propósito. :-)
...