sexta-feira, 8 de março de 2013

Como utilizar o cron e os arquivos crontab



Como utilizar o cron e os arquivos crontab para automatizar as tarefas do Linux, agendando qualquer tipo de coisa. Ótimo para quem quer poupar tempo e trabalho!

O “cron” é um programa de “agendamento de tarefas”. Com ele você pode programar para ser executado qualquer coisa numa certa periodicidade ou até mesmo em um exato dia, numa exata hora. Um uso bem comum do cron é o agendamento de tarefas administrativas de manutenção do seu sistema, como por exemplo, procura por links simbólicos quebrados, análise de segurança do sistema, backup, entre outros. Estas tarefas são programadas para todo dia, toda semana ou todo mês, serem automaticamente executadas através do crontab e um script shell comum. A configuração do cron geralmente é chamada de crontab.

Os sistemas Linux possuem o cron sempre presente. Pelo menos eu nunca vi nenhuma distribuição que não incluísse o tão útil cron. A configuração tem duas partes: Uma global, e uma por usuário. Na global, que é o root quem controla, o crontab pode ser configurado para executar qualquer tarefa de qualquer lugar, como qualquer usuário. Já na parte por usuário, cada usuário tem seu próprio crontab, sendo restringido àpenas ao que o usuário pode fazer (e não tudo, como é o caso do root).

Para configurar um crontab por usuário, utiliza-se o comando “crontab“, junto com um parâmetro, dependendo do que você quiser fazer. Abaixo uma relação:
Comando        Função
crontab -e        Edita o crontab atual do usuário
crontab -l        Exibe o atual conteúdo do crontab do usuário
crontab -r        Remove o crontab do usuário

Se você quiser verificar os arquivos crontab dos usuários, você precisará ser root. O comando crontab coloca os arquivos dos usuários no diretório:

/var/spool/cron/usuario

Onde “usuario” corresponde ao usuário dono do arquivo crontab.

Agora se você quiser editar o crontab global, este fica no arquivo “/etc/crontab“, e só pode ser manipulado pelo root. E agora que já sabemos onde ficam os arquivos de configuração, vamos estudar o formato da linha do crontab, que é quem vai dizer o que executar e quando. Vamos ver um exemplo:

0          4          *          *          *          who

Então como se pode ver, a linha é dividida em 6 campos separados por tabs ou espaço:
Campo            Função
1o.       Minuto
2o.       Hora
3o.       Dia do mês
4o.       Mês
5o.       Dia da semana
6o.       Programa para execução

Todos estes campos, sem contar com o 6o., são especificados por números. Veja a tabela abaixo para os valores destes campos:
Campo            Valores
Minuto            0-59
Hora    0-23
Dia do mês     1-31
Mês     1-12
Dia da semana            0-6 (o “0″ é domingo), 1 é segunda, etc.

Então o que nosso primeiro exemplo estava dizendo? A linha está dizendo: “Execute o comando ‘who’ todo dia de todo mês sendo o dia qualquer dia da semana, às 4 horas e 0 minutos.“. Vamos pegar mais exemplos para analisar:

1,21,41            *          *          *          *          echo "Meu crontab rodou mesmo!"

Aqui está dizendo: “Executar o comando do sexto campo toda hora, todo dia, nos minutos 1, 21 e 41“.

30        4          *          *          1          rm -rf /tmp/*

Aqui está dizendo: “Apagar todo conteúdo do diretório /tmp toda segunda-feira, as 4:30 da manhã.“.

45        19        1,15     *          *          /usr/local/bin/backup

Aqui está dizendo: “Executar o comando ‘backup’ todo dia 1 e 15 às 19:45.“.

E assim você pode ir montando inúmeros jeitos de agendamento possível. No arquivo do crontab global, o sexto campo pode ser substituído pelo nome do usuário, e um sétimo campo adicionado com o programa para a execução, como mostro no exemplo a seguir:

0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg

Aqui está dizendo: “Executar o mrtg como usuário root, durante 5 e 5 minutos dos minutos 0-59. Ou seja, executar de 5 em 5 minutos o mrtg sempre.“.

Em alguma distribuições, os agendamentos mais comuns estão programados para serem executados. Veja as linhas abaixo:

01        *          *          *          *          root     run-parts /etc/cron.hourly
02        4          *          *          *          root     run-parts /etc/cron.daily
22        4          *          *          0          root     run-parts /etc/cron.weekly
42        4          1          *          *          root     run-parts /etc/cron.monthly

O programa “run-parts” executa todos os scripts executáveis dentro de um certo diretório. Então com essas linhas, temos diretórios programados para executar programas de hora em hora, diariamente, semanalmente ou mensalmente. Abaixo a tabela:
Diretório         Período
/etc/cron.hourly          De hora em hora
/etc/cron.daily             Diariamente
/etc/cron.weekly         Semanalmente
/etc/cron.monthly       Mensalmente

Então todos os arquivos executáveis dentro de cada diretório serão executados no seu correspondente período. Ou seja, posso colocar um certo conteúdo no arquivo “/etc/cron.daily/teste“, depois torná-lo executável através do comando “chmod +x /etc/cron.daily/teste“, e então ele será executado todo dia 

Comandos basicos do editor vi



O editor de texto preferido de 9 entre cada 10 usuários UNIX .
A sintaxe para executar o vi eh a seguinte: 

$ vi nome_do_arquivo

Uma vez carregado o vi, veja abaixo uma lista dos principais comandos:

Observação:
Para passar para o modo comando pressione ESC.

Comandos básicos de inserção de texto:

i
Insere texto antes do cursor
a
Insere texto depois do cursor
r
Insere texto no inicio da linha onde se encontra o cursor
A
Insere texto no final da linha onde se encontra o cursor
o
Adiciona linha abaixo da linha atual
O
Adiciona linha acima da linha atual
Ctrl + h
Apaga o ultimo caracter



Comandos básicos de movimentação:

Ctrl+f
Move o cursor para a próxima tela
Ctrl+b
Move o cursor para a tela anterior
H
Move o cursor para a primeira linha da tela
M
Move o cursor para o meio da tela
L
Move o cursor para a ultima linha da tela
h
Move o cursor um caracter a esquerda
j
Move o cursor para a próxima linha
k
Move o cursor para linha anterior
l
Move o cursor um caracter a direita
w
Move o cursor para o inicio da próxima palavra (Ignora a pontuação)
W
Move o cursor para o inicio da próxima palavra (Não ignora a pontuação)
b
Move o cursor para o inicio da palavra anterior (Ignora a pontuação)
B
Move o cursor para o inicio da palavra anterior (Não ignora a pontuação
0
Move o cursor para o inicio da linha atual
^
Move o cursor para o primeiro caracter não branco da linha atual
$
Move o cursor para o final da linha atual
nG
Move o cursor para a linha n
G
Move o cursor para a ultima linha do arquivo



Comandos básicos para localizar texto:

/palavra
Busca pela palavra ou caracter em todo o texto
?palavra
Move o cursor para a ocorrência anterior da palavra
n
Repete o ultimo comando / ou ?
N
Repete o ultimo comando / ou ? , na direção reversa
Ctrl+g
Mostra o nome do arquivo, o numero da linha corrente e o total de linhas



Comandos básicos para alteração de texto:

x
Deleta o caracter que esta sob o cursor
dw
Deleta a palavra, da posição atual do cursor ate o final
dd
Deleta a linha atual
D
Deleta a linha a partir da posição atual do cursor ate o final
rx
Substitui o caracter sob o cursor pelo especificado em x( opcional indicar o caracter)
Rx
Substitui a palavra sob o cursor pela palavra indicada em x
u
Desfaz a ultima modificação
U
Desfaz todas as modificações feitas na linha atual
J
Une a linha corrente a próxima
s:/palavra1/palavra2
Substitui a primeira ocorrência de "palavra1" por "palavra2"



Comandos para salvar o texto:

:wq
Salva o arquivo e sai do editor
:w nome_do_arquivo
Salva o arquivo corrente com o nome especificado
:w! nome_do_arquivo
Salva o arquivo corrente no arquivo especificado
:q
Sai do editor
:q!
Sai do editor sem salvar as alterações realizadas

Acertando data/hora no Linux



Para alterar data e hora no GNU/Linux, basta digitar o comando abaixo com seus respectivos valores:

# date mmddhhmmyyyy

O significado de cada conjunto de caracteres é:

    * mm: mês
    * dd: dia
    * hh: hora
    * mm: minuto
    * yyyy: ano