Linux - Planejando Processos
Alguns processos podem ser iniciados automaticamente em intervalos de tempo específicos. Para configurar esses processos no Linux, usa-se uma ferramenta chamada cron. O núcleo dessa ferramenta é o processo crond, que é automaticamente iniciado no Linux e verifica sua configuração a cada minuto para ver se há alguma tarefa a ser executada. Por padrão, o cron lê seu principal arquivo de configuração, o /etc/crontab.
O arquivo /etc/crontab gerencia todas as tarefas que devem ser agendadas via cron. Vamos examinar o conteúdo deste arquivo:
programicio@Programicio:~$ cat /etc/crontab
# /etc/crontab: crontab do sistema
# Diferente de outros crontabs, você não precisa executar o comando `crontab`
# para instalar a nova versão ao editar este arquivo
# e os arquivos em /etc/cron.d. Esses arquivos também possuem campos de nome de usuário,
# que nenhum outro crontab possui.
SHELL=/bin/sh
# Você também pode sobrescrever o PATH, mas por padrão, as versões mais recentes o herdam do ambiente
#PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Exemplo de definição de tarefa:
# .---------------- minuto (0 - 59)
# | .------------- hora (0 - 23)
# | | .---------- dia do mês (1 - 31)
# | | | .------- mês (1 - 12) OU jan, feb, mar, apr ...
# | | | | .---- dia da semana (0 - 6) (Domingo=0 ou 7) OU sun, mon, tue, wed, thu, fri, sat
# | | | | |
# * * * * * nome-do-usuário comando a ser executado
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.daily; }
47 6 * * 7 root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.weekly; }
52 6 1 * * root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.monthly; }
#Em todas as configurações do crontab, você pode encontrar três elementos diferentes. Primeiro, é possível ver a indicação do tempo em que o comando deve ser executado. Para especificar o tempo de execução de uma tarefa cron, você pode usar 5 componentes:
- Minutos
- Horas
- Dia do mês
- Mês
- Dia da semana
Em seguida, vem o nome do usuário com as permissões necessárias para executar a tarefa, e a última parte é o nome do comando a ser executado.
Por exemplo, vejamos a última linha:
52 6 1 * * root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.monthly; }Nesse caso, a tarefa test -x ... é executada como o usuário root no dia 1 de qualquer mês às 6:52.
É importante notar que não é recomendável alterar este arquivo diretamente. Alterações feitas no /etc/crontab funcionarão, mas você pode perdê-las, pois este arquivo pode ser sobrescrito durante atualizações de pacotes. Além do crontab do sistema, os usuários individuais também podem ter seu próprio crontab. Geralmente, esta é a forma padrão de alterar a lista de tarefas agendadas. Para isso, você deve usar o comando crontab. Por exemplo, vamos inserir o seguinte comando:
crontab -e
Se o usuário atual não tiver criado tarefas antes, uma mensagem correspondente será exibida:
programicio@Programicio:~$ crontab -e
no crontab for programicio - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano >---- mais fácil
2. /usr/bin/vim.tiny
3. /bin/ed
Choose 1-3 [1]:Escolha o editor de texto preferido. Como resultado, uma janela do editor será aberta, onde você pode definir tarefas para execução automática via cron:
40 17 * * 1-5 ps aux > ~/Documents/proclog
Aqui, a tarefa ps aux > ~/Documents/proclog será executada às 17:40. Os números 1-5 como dia da semana indicam que o cron deve executar essa tarefa apenas de segunda a sexta-feira.
Se precisar remover uma tarefa, você pode abrir o arquivo e excluir ou comentar a linha correspondente. Da mesma forma, você pode abrir o arquivo para adicionar novas tarefas ou modificar as existentes.
Outra forma de agendar tarefas via cron é criar arquivos no diretório /etc/cron.d. Todos os arquivos neste diretório serão incluídos na execução do cron. Usar essa abordagem oferece uma alternativa para fazer alterações no arquivo /etc/crontab. A vantagem é que as alterações não serão perdidas durante as atualizações de software. O conteúdo dos arquivos em /etc/cron.d é exatamente o mesmo que o das linhas adicionadas ao /etc/crontab.
O cron também utiliza quatro diretórios diferentes para executar tarefas em intervalos regulares. Esses diretórios são /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly e /etc/cron.monthly. Você pode colocar scripts nesses diretórios para que sejam executados nos intervalos de tempo especificados. O conteúdo desses scripts é o código de scripts bash, e eles não contêm indicadores de tempo específicos do cron.