Como agendar tarefas no Linux para quando a máquina ficar ociosa.

Se você quiser rodar programas ou agendar atividades para horários opostos aos de pico do sistema, ou seja, quando estiver (razoavelmente) ocioso, o comando batch é a solução.
Tarefas agendadas através deste utilitários serão executadas automaticamente quando a média da carga de trabalho do sistema estiver abaixo de 0.8 — no meu sistema (Debian 9.0 Stretch o valor padrão é 1.5.
É possível ajustar este número no atd ou no atrun, se ele não for satisfatório.
Use man, combinado com o comando grep, para saber qual o valor no seu sistema:


man batch | grep -i average

               other  words,  when the load average drops below 1.5,
       processing rules with respect to load average apply.  If  atq

O batch faz parte do pacote do comando at — clique para obter mais detalhes.
Você pode restringir acesso ao at e ao batch, inscrevendo os nomes de usuários no arquivo /etc/at.deny.
Para alterar o valor referente à carga média de trabalho do sistema, abaixo do qual o batch já pode começar a executar as tarefas listadas, use o comando atd:

atd -l x

Substitua x pelo valor desejado.
Este comando necessita de privilégios administrativos.
Ao rodar o comando batch, ele entrará no modo prompt, pedindo para que você forneça tarefas a serem executadas, uma por linha.
Ao terminar de listar os comandos, tecle ‘Ctrl + D’ (^D).


batch

warning: commands will be executed using /bin/sh
at> espeak -v pt "Estou ocioso, no momento, patrão!"
at> espeak -v pt "Me dê algo para fazer."
at> ^D 
job 20 at Thu Sep 14 15:22:00 2017

Esta é a maneira de rodar o comando. Ele não aceita parâmetros, como o comando at.

Referências

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/3/html/System_Administration_Guide/s1-autotasks-at-batch.html.

http://www.tutorialspoint.com/unix_commands/batch.htm

https://kb.iu.edu/d/aewo.

Use o comando at para agendar tarefas no Linux

O Cron não é a única maneira de agendar atividades no Linux.
O comando at permite agendar rapidamente uma tarefa, sem a necessidade de editar a tabela do crontab.


Se tiver interesse, leia mais sobre o cron.
Se precisa definir rapidamente um momento para o sistema realizar uma tarefa, o comando at é uma boa alternativa.
Infelizmente, em alguns sistemas, o comando não vem instalado por padrão — o que pode impossibilitar seu uso em servidores aos quais você não tem acesso com privilégios administrativos, para fazer novas instalações (como o seu provedor de hospedagem, por exemplo).
Para instalar no Debian (ou em outras distribuições baseadas nela), use o apt:

sudo apt install at

O pacote inclui os utilitarios at, batch, atq, atrm — para enfileirar comandos, examinar e/ou apagar tarefas agendadas etc.
Veja um exemplo simples de execução, com o uso do comando history:


at now

warning: commands will be executed using /bin/sh
at> history
at> 
job 4 at Thu Sep 14 10:44:00 2017

Neste caso, o comando será executado imediatamente (now), tão logo termine a edição do at.
Você pode inserir vários comandos Linux, um a cada linha.
Quando terminar de enfileirar linhas de comando, tecle Ctrl + D (^D), para finalizar.
Para agendar um comando para execução daqui a dois minutos:


at now + 2 min

warning: commands will be executed using /bin/sh
at> espeak -v pt "O tempo de dois minutos acabou de expirar, capitão!"
at> ^D 
job 9 at Thu Sep 14 10:54:00 2017

Veja como agendar backup de um diretório para daqui a 3 minutos:


at now + 3 min

warning: commands will be executed using /bin/sh
at> espeak -v pt "Iniciando o backup do diretório de scripts"
at> tar cvzf backup.tz scripts/
at> espeak -v pt "o backup foi finalizado."
at> 
job 12 at Thu Sep 14 11:01:00 2017

Outras formas de agendamento de tarefas com o comando at, no Linux

Há outras maneiras de agendar tarefas com o comando at, que permitem maior flexibilidade na escolha do momento da execução.
Veja alguns exemplos, que podem ser readequados ao seu caso:

  • at 11:08 AM September 14 2017 — Agende a execução da tarefa para uma data e hora específicas. Neste caso: 11:08, 14 de Setembro de 2017.
  • at now + 1 hours — Execução agendada para daqui a duas horas.
  • at now +24 hours — agendamento para o dia seguinte, nesta mesma hora.
  • at 8:00 PM tomorrow — agendamento para amanhã (tomorrow), 8h da noite.
  • at now + 2 years — agendamento para daqui a 2 anos.

Quando o comando não consegue “entender” a hora/data oferecida, ele vai retornar a mensagem “Garbled time!“.
Há outras formas de especificar hora e data, para falantes da língua inglesa. Veja alguns exemplos:

  • noon — meio dia.
  • midnight — meia noite.
  • tomorrow — se especificado sozinho, o at já sabe que você se refere a hora atual, sé que amanhã.
  • noon tomorrow — amanhã, meio dia.
  • next week — próxima semana.
  • next month — próximo mês.
  • next friday — próxima sexta-feira.
  • now + 3 weeks — daqui a 3 semanas, neste mesmo horário.
  • AUG — em Agosto, nesta mesma data e hora.

Como verificar as tarefas agendadas no sistema

Você verificar os trabalhos enfileirados com a opção ‘-l’ ou com o comando atq:


at -l

14  Thu Sep 14 13:09:00 2017 a justincase
16  Thu Sep 14 11:17:00 2017 a justincase

O número exibido na primeira coluna é a ID de cada tarefa agendada.
O comando atq e suas variantes, só irá listar as tarefas do seu usuário.
Para obter informações sobre todos os usuários no sistema, rode o comando com privilégios de superusuário.

Como cancelar uma tarefa

Você pode indicar a ID de um item, que ainda não foi executado, para cancelamento, com o comando atrm ou com uma das opções ‘-r’ ou ‘-d’:


at -r 14

Como agendar uma lista de comandos dentro de um arquivo

Você pode listar todas as tarefas que deseja executar, uma por linha, dentro de um arquivo texto.
Em seguida, por entregar o arquivo para o at.
Veja o meu arquivo:


cat comandos.txt 

whiptail --backtitle "Importante!"  --title "mensagem" --msgbox "minha linda mensagem" 7 30

espeak -v pt "Por favor, dê atenção a esta importante mensagem."

Para fazer com que o at execute estas tarefas, use a opção ‘-f’:


at -f comandos.txt now

Referências

https://unix.stackexchange.com/questions/97882/why-do-we-need-the-at-command-in-linux.

https://www.computerhope.com/unix/uat.htm.

Sysstat: exemplos práticos de uso do comando sar

O SAR é um programa de monitoramento da performance do sistema Linux.
Neste post, vamos mostrar como o aplicativo funciona, através de exemplos práticos, que podem ser usados no dia a dia do sysadmin, para obter dados sobre processamento, E/S, desempenho do armazenamento na memória etc.
Uma vez instalado, é simples fazer o monitoramento da performance do Linux e levantar estatísticas de uso do sistema, com o uso de alguns comandos no terminal.
monitoramento linux sar sysstat
O sar faz parte do pacote de aplicativos de monitoramento SYSSTAT, desenvolvidos em C, pelo programador francês Sebastien Godard.
O fato de ser desenvolvido em linguagem C, implica em um programa leve, rápido e que interfere muito pouco nas atividades do sistema, durante sua execução.

Uso básico do sar

O sar pode ser executado direto na linha de comando, por qualquer usuário, sem privilégios especiais. Veja:

sar -V

este comando serve para mostrar a versão do sar, em execução:

sysstat versão 10.2.0
(C) Sebastien Godard (sysstat <at> orange.fr)

Uma vez que você tenha o sar instalado e funcionando, pode executar mais alguns comandos com ele.
O exemplo, abaixo, mostra as estatísticas referentes ao uso da CPU do seu computador, com 1 segundo de intervalo, 5 vezes:

sar 1 5

Este foi o resultado no meu computador:

Linux 3.13.0-32-generic (VoYag3r) 	29-07-2014 	_i686_	(2 CPU)

17:04:49        CPU     %user     %nice   %system   %iowait    %steal     %idle
17:04:50        all     23,62      0,00      1,51      0,00      0,00     74,87
17:04:51        all     43,72      0,00      2,01      0,00      0,00     54,27
17:04:52        all     28,50      0,00      2,50      0,00      0,00     69,00
17:04:53        all     33,00      0,00      2,00      0,00      0,00     65,00
17:04:54        all     30,77      0,00      1,03      0,00      0,00     68,21
Média:         all     31,92      0,00      1,81      0,00      0,00     66,26

Alguns exemplos práticos de uso do sar, na linha de comando

Há 2 maneiras básicas de invocar o sar, na linha de comando:

  • acompanhado por uma opção (sem especificar um arquivo de dados saXX).
    Isto fará o aplicativo procurar pelos dados contidos no arquivo saXX do dia atual e exibir os dados gravados até aquele momento.
  • acompanhado de uma opção e especificando o arquivo saXX, através do parâmetro -f.
    Isto o fará exibir os dados referentes à performance obtida até a data especificada no arquivo.

Nota: o XX, usado acima, se refere ao dia do mês.
Nos exemplos que seguem, vou explicar como obter dados da performance do sistema no dia de hoje.
Se quiser se referir a uma data especial, basta adicionar o parâmetro -f /var/log/sysstat/saXX ao final da linha de comando do sar.
Toda vez em que você executar o comando sar, ele irá mostrar, na primeira linha, um texto semelhante a este:

Linux 3.13.0-32-generic (VoYag3r) 	01-08-2014 	_i686_	(2 CPU)

Esta linha de texto mostra:

  • A versão do kernel Linux do sistema: 3.13.0-32-generic.
  • O hostname a que os dados se referem: VoYag3r.
  • A data a que se referem os dados 01-08-2014.
  • A arquitetura do sistema: _i686_.
  • O número de CPUs disponíveis no sistema: 2 CPU.

Em tempo, o comando sar -u, serve para mostrar o uso cumulativo, em tempo real, de todas as unidades de processamento do sistema.
Se você usar o parâmetro ALL, vai ver mais informações. Experimente:

sar -u ALL

Você pode usar as opções -P ALL para ver estatísticas de uso de todos os núcleos das CPUs separados:

sar -P ALL 1 2

O resultado, abaixo, mostra as estatísticas dos núcleos (0 e 1) da CPU, com 1 segundo de intervalo, 2 vezes:

Linux 3.13.0-32-generic (VoYag3r) 01-08-2014 _i686_ (2 CPU)

17:00:03        CPU     %user     %nice   %system   %iowait    %steal     %idle
17:00:04        all     58,88      0,00      1,02      0,00      0,00     40,10
17:00:04          0     17,17      0,00      3,03      0,00      0,00     79,80
17:00:04          1    100,00      0,00      0,00      0,00      0,00      0,00

17:00:04        CPU     %user     %nice   %system   %iowait    %steal     %idle
17:00:05        all     54,00      0,00      1,00      0,00      0,00     45,00
17:00:05          0      8,16      0,00      1,02      0,00      0,00     90,82
17:00:05          1    100,00      0,00      0,00      0,00      0,00      0,00

Média:         CPU     %user     %nice   %system   %iowait    %steal     %idle
Média:         all     56,42      0,00      1,01      0,00      0,00     42,57
Média:           0     12,69      0,00      2,03      0,00      0,00     85,28
Média:           1    100,00      0,00      0,00      0,00      0,00      0,00

Como obter estatísticas individuais de um dos núcleos (cores)

Se você tem um processador, com vários núcleos, pode obter valores individuais do uso de cada um, com o parâmetro -P.
Se eu quiser ver apenas os resultados do segundo núcleo, eu uso o parâmetro -P 1 (lembrando que a contagem dos núcleos começa em 0).
No exemplo, abaixo, o sar vai mostrar as estatísticas do segundo núcleo, com 1 seg. de intervalo, 5 vezes. Veja como fica:

sar -P 1 1 5
Linux 3.13.0-32-generic (VoYag3r) 	01-08-2014 	_i686_	(2 CPU)

17:07:19        CPU     %user     %nice   %system   %iowait    %steal     %idle
17:07:20          1     15,84      0,00      3,96      0,00      0,00     80,20
17:07:21          1     43,00      0,00      5,00      0,00      0,00     52,00
17:07:22          1     19,39      0,00      2,04      0,00      0,00     78,57
17:07:23          1    100,00      0,00      0,00      0,00      0,00      0,00
17:07:24          1    100,00      0,00      0,00      0,00      0,00      0,00
Média:           1     55,71      0,00      2,20      0,00      0,00     42,08

Tutoriais Linux - Clique para ler mais.

Estatísticas de uso de memória

Vamos deixar os números das CPUs de lado por um momento.
No exemplo, que segue, vou mostrar como usar o sar para obter dados do uso da memória do sistema.
A coluna kbmemfree se refere à memória livre. kbmemused, se refere a memória em uso. Os valores estão em kilobytes.
O comando sar -r 1 3 mostra as estatísticas gerais de uso da memória, com 1 segundo de intervalo, 3 vezes:

sar -r 1 3

veja o resultado:

Linux 3.13.0-32-generic (VoYag3r) 	01-08-2014 	_i686_	(2 CPU)

17:29:16    kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
17:29:17       304296   1747916     85,17     13572    710340   3142020     44,73    792276    870516       168
17:29:18       303924   1748288     85,19     13572    710340   3142020     44,73    791900    870516       168
17:29:19       303212   1749000     85,23     13572    710340   3142020     44,73    792796    870516       168
Média:        303811   1748401     85,20     13572    710340   3142020     44,73    792324    870516       168

Experimente outras variações do comando:

  • sar -r
  • sar -r 1 5
  • sar -r 1 3 -f /var/log/sysstat/sa30

Como acompanhar o uso da memória swap

O parâmetro -S pode ser usado para acompanhar o uso da memória swap no sistema.
Este comando pode ser usado para determinar se o seu sistema está fazendo uso do swapping ou não — se as colunas kbswpused e %swpused estiverem com valores zerados, então o sistema não está usando a memória swap.
O comando, abaixo, mostra as estatísticas de uso do swap, com intervalo de 1 segundo, 5 vezes:

sar -S 1 5

Como você pode ver, no meu sistema, está havendo uso do swapping:

Linux 3.13.0-32-generic (VoYag3r) 	01-08-2014 	_i686_	(2 CPU)

17:54:43    kbswpfree kbswpused  %swpused  kbswpcad   %swpcad
17:54:44      4970576      2020      0,04         0      0,00
17:54:45      4970576      2020      0,04         0      0,00
17:54:46      4970576      2020      0,04         0      0,00
17:54:47      4970576      2020      0,04         0      0,00
17:54:48      4970576      2020      0,04         0      0,00
Média:       4970576      2020      0,04         0      0,00

E no seu?

Outras maneiras úteis de usar o sar

Você pode experimentar também estas outras variações de uso do sar:

  • sar -S
  • sar -S -f /var/log/sysstat/sa30 — vai buscar os dados do dia 30 (sa30).
  • sar -R — para identificar o número de páginas de memória liberadas, usadas e em cache a cada segundo, no sistema.
  • sar -H — para identificar as hugepages (em KB) em uso ou disponíveis.
  • sar -B — para gerar estatísticas (em KB) de dados paginados em relação ao disco por segundo.
  • sar -W — para gerar estatísticas de swap de páginas por segundo.

Como acompanhar o fluxo (Entrada/Saída) de dados

O comando, abaixo, mostra as estatísticas de fluxo de entrada e saída de dados (E/S), a cada 1 segundo e 3 vezes:

sar -b 1 3
Linux 3.13.0-32-generic (VoYag3r) 	04-08-2014 	_i686_	(2 CPU)

21:43:48          tps      rtps      wtps   bread/s   bwrtn/s
21:43:49         0,00      0,00      0,00      0,00      0,00
21:43:50         1,00      0,00      1,00      0,00    328,00
21:43:51         0,00      0,00      0,00      0,00      0,00
Média:          0,33      0,00      0,33      0,00    109,33

Significado dos campos

  • tpsTransactions per second ou transações por segundo (leitura e gravação incluídas).
  • rtpsRead transactions per second ou transações de leitura por segundo.
  • wtpsWrite transactions per second ou transações de escrita por segundo.
  • bread/sBytes read per second ou bytes lidos por segundo.
  • bwrtn/sBytes written per second ou bytes escritos por segundo.
sysstat comando sar Linux terminal
Clique para detalhes.

Monitorando atividades de dispositivos de E/S

O comando sar -d, para sermos objetivos aqui, pode ser usado para monitorar as atividades individuais de dispositivos de bloco e identificar atividades específicas de cada dispositivo.

Entenda o que são: Dispositivos de bloco ou block devices

Sistemas operacionais podem suportar um segundo tipo de dispositivo de disco conhecido como block device — dispositivos para os quais o kernel provê caching. (FreeBSD handbook).
É um arquivo que representa um dispositivo de hardware. Um arquivo especial de bloco, se distingue de outros por oferecer acesso ao dispositivo de hardware de forma a que suas características (a do hardware) não sejam visíveis ao sistema. (OpenGroup).

Veja um exemplo, na imagem abaixo:

monitoramento com sysstat - comando sar
Clique pra ampliar.

Para entender melhor a imagem acima, a coluna DEV é a que mostra os dispositivos.
Os nomes dos dispositivos podem vir acompanhados de uma numeração indicadora da quantidade possível de dispositivos conectáveis.
Tomemos o seguinte exemplo: dev20-1.
A numeração que sucede o nome do dispositivo quer dizer que ele aceita a conexão de 1 até 20 outros dispositivos: dev1, dev2, dev3... dev20.
Eu acho mais fácil entender esta listagem, com o uso do parâmetro -p -d. Assim:

sar -p -d 1 1
Linux 3.13.0-32-generic (VoYag3r) 	05-08-2014 	_i686_	(2 CPU)

19:23:44          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
19:23:45          sda      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00

Média:           DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Média:           sda      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00

Com o uso do parâmetro -p é possível ter nomes mais detalhados, como sda, sdb, sda1, sda2, sdc1, etc.
Experimente mais algumas variantes do comando:

  • sar -d -f /var/log/sysstat/sa>XX — substitua o XX pelo dia do mês, cujos dados você deseja ver.
  • sar -p -d 1 10

Determine os valores do context switching por segundo

O parâmetro -w vai exibir a quantidade total de processos criados por segundo, na primeira coluna, e o número de chaveamentos realizados por segundo (cswch/s), na outra coluna.
Veja como:

sar -w 1 3
Linux 3.13.0-32-generic (VoYag3r) 	06-08-2014 	_i686_	(2 CPU)

14:12:17       proc/s   cswch/s
14:12:18         0,00    492,00
14:12:19         0,00    650,00
14:12:20         0,00    619,00
Média:          0,00    587,00

Definição de context switch

O termo context switch ou process switching, em inglês, pode ser traduzido como “troca de contexto”, em uma tradução literal. Eu prefiro a palavra chaveamento. Leia mais na Wikipedia.
O context switching, ou chaveamento, pode ser descrito, mais especificamente, como uma das seguintes ações do kernel, em relação a processos e threads:

  • suspensão da progressão de um processo e armazenamento do estado da CPU — ou seja o contexto deste processo, em algum lugar da memória;
  • recuperação do contexto de outro processo armazenado na memória e sua reintegração nos registros da CPU e
  • retorno ao contador do programa (ou seja, à linha de código em que o processo anterior foi interrompido) para retomá-lo.

(The Linux Information Project).

Nas minhas palavras, chaveamento é quando o kernel suspende a execução de um processo ou thread na CPU e retoma a execução de qualquer outro processo, que já havia sido suspenso anteriormente — sendo que um processo é, por definição, a instância de um programa em execução.

Experimente outras variações do exemplo dado:

  • sar -w
  • sar -w 1 5
  • sar -w -f /var/log/sysstat/saXX

Tutoriais Linux - Clique para ler mais.

Como ver estatísticas de rede com o sar

O comando sar, em conjunto com o parâmetro -n, pode ser usado para obter informações sobre o desempenho de diversos aspectos do uso da rede no seu sistema — o que inclui o número de pacotes recebidos/transmitidos através da interface de rede, número de falhas etc.
Além do parâmetro -n, é necessário dizer o dispositivo de rede do qual se deseja recolher as informações.
Veja no quadro informativo abaixo:

  • DEV – Exibe estatísticas vitais para dispositivos de rede eth0, eth1, wlan0 etc.
  • EDEV – Exibe números das falhas referentes aos dispositivos de rede.
  • NFS – Mostra as atividades dos clientes do sistema de arquivos de rede (Network File System).
  • NFSD – Mostra as atividades dos servidores NFS.
  • SOCK – Lista os sockets do IPv4 em uso.
  • IP – Exibe o tráfego na rede IPv4.
  • EIP – Mostra os erros na rede IPv4.
  • ICMP – Mostra o tráfego na rede ICMPv4.
  • EICMP – Exibe erros na rede ICMPv4.
  • TCP – Exibe o tráfego na rede TCPv4.
  • ETCP – Exibe erros na rede TCPv4.
  • UDP – Mostra o tráfego de rede UDPv4.
  • as opções SOCK6, IP6, EIP6, ICMP6, UDP6 são equivalentes às anteriores, só que voltadas para redes IPv6.
  • ALL – Exibe todas as informações dos itens anteriores. A saída deste comando é bastante extensa.

Exemplo de uso:

sar -n IP 1 2
Linux 3.13.0-32-generic (VoYag3r) 	06-08-2014 	_i686_	(2 CPU)

17:51:58       irec/s  fwddgm/s    idel/s     orq/s   asmrq/s   asmok/s  fragok/s fragcrt/s
17:51:59         3,00      0,00      3,00      0,00      0,00      0,00      0,00      0,00
17:52:00         0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
Média:          1,50      0,00      1,50      0,00      0,00      0,00      0,00      0,00

Relacione os dados obtidos pelo sar, usando start time

Ao analisar os dados do histórico, contido no arquivo /var/log/sysstat/saXX, com o uso da opção sar -f, é possível observar todos os dados exibidos a começar pelo horário de 12:00 a.m ou 00:00:00.
Você pode mudar a hora do início do relatório.
O parâmetro -s hh:mi:ss permite especificar um horário personalizado para o sistema usar como horário de início do relatório.
Veja como indicar o início do relatório de média de carga, para as 06 da manhã:

sar -q -f /var/log/sysstat/sa05 -s 06:00:00

Como não há meios (até a versão que eu estou usando) de estabelecer uma hora limite pro relatório, é necessário lançar mão de “outros artifícios”.
No exemplo abaixo, a saída do comando é filtrada pelo comando head:

sar -q -f /var/log/sysstat/sa05 -s 06:00:00 | head
Linux 3.13.0-32-generic (VoYag3r) 	05-08-2014 	_i686_	(2 CPU)

06:05:01      runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
06:15:01            0       303      0,27      0,23      0,13         0
06:25:01            0       334      0,25      0,31      0,27         0
06:35:01            0       336      0,35      0,20      0,22         1
06:45:01            0       333      0,04      0,15      0,20         0
06:55:01            0       334      0,12      0,13      0,16         0
07:05:01            0       333      0,25      0,25      0,19         0
07:15:01            0       333      0,09      0,15      0,15         0

O comando head

A função do comando head é exibir a primeira parte de cada arquivo enviado para ele.
Como padrão, o comando exibe as primeiras 10 linhas do arquivo.

No exemplo, abaixo, usei o comando grep para filtrar as saídas que ocorrem aos 15 minutos de cada hora. Veja como ficou:

sar -q -f /var/log/sysstat/sa05 -s 06:00:00 | grep -i ":15:01"
06:15:01            0       303      0,27      0,23      0,13         0
07:15:01            0       333      0,09      0,15      0,15         0
08:15:01            0       338      0,04      0,11      0,14         0
09:15:01            2       336      0,25      0,16      0,15         0
10:15:01            0       337      0,16      0,19      0,16         0
11:15:01            0       337      0,09      0,17      0,24         0
12:15:01            0       343      0,52      0,54      0,79         0
13:15:01            0       334      0,06      0,07      0,12         0
14:15:01            3       351      0,94      0,77      0,63         0
15:15:01            0       349      0,40      0,50      0,50         0
16:15:01            0       345      0,42      0,39      0,42         0
17:15:01            5       390      3,79      2,93      2,08         0
18:15:01            0       356      0,21      0,32      0,94         0
19:15:01            0       359      0,46      0,65      0,71         0
20:15:01            0       364      0,75      0,49      0,61         0
21:15:01            1       362      0,74      0,45      0,47         0
22:15:01            2       362      0,28      0,39      0,48         0
23:15:01            4       362      0,43      0,46      0,54         0

Fila de execução e média de carga

No exemplo anterior, mostrei o uso da opção -q (mas não expliquei para que servia…) 😉
Esta opção informa o comprimento da fila e a média da carga, nos últimos intervalos de 1, 5 e 15 minutos.
Veja no quadro abaixo, os significados dos cabeçalhos de cada coluna.

significado do relatório

O parâmetro -q retorna valores, em 6 colunas:

  • runq-sz — comprimento da fila (número de tarefas esperando sua hora de execução).
  • plist-sz — Número de itens na lista de tarefas.
  • ldavg-1 — Média de carga (de trabalho) do sistema, no último minuto.
    A média da carga é computada a partir da quantidade média de tarefas que estejam ou que possam estar em execução (R state) e o número de tarefas em “dormência” ininterrupta (D state) dentro do intervalo especificado (1 minuto).
  • ldavg-5 — Média de carga do sistema nos últimos 5 minutos.
  • ldavg-15 — Média de carga do sistema nos últimos 15 minutos.
  • blocked — Número momentâneo de tarefas bloqueadas, esperando a conclusão do fluxo de E/S.

Veja um exemplo:

sar -q 1 5
Linux 3.13.0-32-generic (VoYag3r) 	07-08-2014 	_i686_	(2 CPU)

15:39:02      runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
15:39:03            1       322      0,42      0,56      0,68         0
15:39:04            1       321      0,38      0,55      0,67         0
15:39:05            3       321      0,38      0,55      0,67         0
15:39:06            1       321      0,38      0,55      0,67         0
15:39:07            4       321      0,38      0,55      0,67         0
Média:             2       321      0,39      0,55      0,67         0

Conclusão

Há inúmeras outras formas de aplicação do sar, que irão surgir com o uso e as necessidades.
Combinar o programa com outros comandos Linux é uma forma de multiplicar suas possibilidades.

Leia outros artigos, sobre este assunto, para aumentar seus conhecimentos:

Como instalar o sysstat e o sar no seu sistema.
Blackmoreops: Exemplos de uso do sar. (english)
Crybit: Monitoramento de carga e memória com o SAR. (english)
O comando grep.

Monitore o seu sistema com as ferramentas do SYSSTAT

O SYSSTAT é um pacote de softwares para monitoramento da performance do seu sistema Linux.
O pacote contém um conjunto de ferramentas para administradores de sistemas, que retornam informações cruciais sobre o uso da CPU, da memória, do fluxo de dados (E/S) etc.
Saída do comando dmesg com erro na porta USBTodas estas informações podem ser gravadas e analisadas com o intuito de detectar possíveis gargalos no sistema.

Motivos para usar o SYSSTAT

Entre as diversas funções do pacote de aplicativos, o site do desenvolvedor relaciona as seguintes:

  • As estatísticas fornecem médias dos valores, calculados sobre um período de amostra.
  • A maioria dos dados sobre o seu sistema podem ser gravados em um arquivo para uma inspeção posterior.
  • Permite configurar a extensão do histórico de dados a ser armazenado.
  • Detecta novos dispositivos on the fly — o que inclui novos discos conectados ao sistema, interfaces de rede etc., que sejam criados ou registrados dinamicamente.
  • Tem suporte tanto a máquinas UP (uniprocessors) quanto a SMP (Symmetric MultiProcessing.
  • Tem suporte a hotplug CPUs (detecta “automagicamente” processadores ao serem habilitados ou desabilitados) e a tickless CPUs.

    O que é o tickless

    “Anteriormente, o kernel do Linux interrompia periodicamente cada CPU em um sistema em uma frequência pré-determinada, 100 Hz, 250 Hz ou 1000 Hz, dependendo da plataforma. O kernel pesquisava a CPU sobre os processos que estava executando, e usava os resultados para a contabilidade do processo e carga de balanceamento.” — Documentação do Red Hat Linux.

  • Funciona em diversas arquiteturas, seja 32 ou 64 bits.
  • Consome muito pouco recurso da CPU — é escrito em C!
  • As estatísticas do sistema podem ser gravadas e exportadas para diversos formatos (CSV, XML, JSON etc).
  • Tem suporte a diversos idiomas, inclusive o português.
  • Há vários outros programas, que você pode baixar, que interagem com os dados do SYSSTAT — um deles é o isag e ele está incluído no pacote.

Como instalar o SYSSTAT

O principal programa do pacote é o sar.
Para usá-lo, é necessário instalar o pacote SYSSTAT. Veja como fazer isto no Ubuntu ou no Debian:

sudo apt-get update
sudo apt-get install sysstat

Quem usa o Red Hat ou Fedora, pode usar o yum:

yum install sysstat

Se você precisar instalar a partir do código fonte, consulte a página do desenvolvedor (link no final do artigo).

O QUE VEM NO PACOTE SYSSTAT?

O pacote instalado, contém vários aplicativos utilitários para monitorar a performance do seu sistema:

  • iostat — relata as estatísticas de uso da CPU, entradas/saídas dos dispostivos, das partições e da rede.
  • mpstat — exibe estatísticas individuais ou combinadas do uso do processador.
  • pidstat — lista estatísticas referentes aos processos em execução: E/S, CPU, memória etc.
  • sar — coleta, exibe e grava informações sobre as atividades no sistema, o que inclui o uso da CPU, da memória, dos discos, das interrupções, das interfaces de redes, das TTY, das tabelas do kernel etc.
  • sadc — é o coletor de dados de atividades do sistema, usadas como backend para o sar.
  • sa1 — o sa1 coleta e armazena dados binários no arquivo de dados diários das atividades do sistema.
  • sa2 — grava um relatório diário resumido de atividades. Constitui um frontend para o programa sar. É projetado para rodar do cron.
  • sadf — mostra os dados coletados pelo sar, em múltiplos formatos (CSV, XML, texto puro etc.) É útil para exportar dados sobre a performance do sistema para um banco de dados, ou para planilhas eletrônicas.
  • sysstat — trata-se da documentação do arquivo de configuração sysstat, que explica o significado das variáveis do sistema, usadas pelos outros comandos descritos.
  • nfsiostat-sysstat — reporta estatísticas de entrada e saída de de dados (E/S) dos sistemas de arquivos de rede (NFS — Network File System).
  • cifsiostat — relata as estatísticas do CIFS

Leia outros posts relacionados ao Linux neste site.

Como configurar o SYSSTAT

Antes de querer por os olhos nas estatísticas, é necessário se certificar de que o sistema está coletando seus dados.
Abra o arquivo /etc/default/sysstat e verifique a linha

ENABLED="true"

O valor da variável ENABLED tem que ser "true", se você quiser que o SYSSTAT colete dados no sistema.
Você precisa ter privilégios administrativos para alterar este arquivo.
Feita a alteração, é necessário reiniciar o serviço:

sudo service sysstat restart

ou

sudo /etc/init.d/sysstat start

A partir daí o SYSSTAT já estará ativo.

Toque final: o crontab

A principal ferramenta do SYSSTAT é o sar e você já pode usá-lo imediatamente.
Já o aplicativo sa2 foi projetado para rodar dentro do cron.
Se você não tem muita intimidade com o CRON ou o CRONTAB, sugiro ler este artigo.
No exemplo, que segue, o crontab está programado para executar o sa1 e o sa2.
O primeiro, a cada 10 minutos e o segundo, todo dia, às 22:00. Veja:

# Executa o sa1 a cada 10 minutos
*/10 * * * * root /usr/lib/sa/sa1 1 1
# Gera um relatório diário a partir dos dados do sa2, às 22:00 
00 22 * * * root /usr/lib/sa/sa2 -A

Com esta configuração no crontab, todo dia um arquivo novo será criado no diretório /var/log/sa.

Fontes:

Página do desenvolvedor: http://sebastien.godard.pagesperso-orange.fr/documentation.html
Mais informações sobre o sar: http://www.blackmoreops.com/2014/06/18/sysstat-sar-examples-usage/

Saiba mais sobre o CRONTAB: https://elias.praciano.com/?s=crontab

Como usar o comando Crontab – o cron para novatos.

Este post tem a pretensão de dar uma rápida introdução ao cron — e cobrir o básico de tudo o que ele é capaz de fazer para você.

O que é o cron?

Cron é o nome do programa que permite aos usuários do Unix/Linux executar comandos ou scripts (grupos de comandos) automaticamente em um determinado horário/data.

É comumente usado pelos administradores de sistemas para programar a execução de suas tarefas administrativas – como o backup.

Vamos ver, aqui, como funciona o Cron Vixie, uma versão desenvolvida por Paul Vixie.

Como iniciar o cron

Patek Philipecron é um daemon, o que significa que ele é um serviço que é iniciado uma vez (usualmente, quando o sistema é ligado), entra em stand by e, na hora certa, executa a(s) tarefa(s) programada(s) – usualmente, em background, ou seja, nos bastidores do sistema.

Outro exemplo de daemon é o servidor FTP, que fica em stand by, quando não está sendo usado.

O daemon crond já vem instalado na maioria das distros Linux e costuma ter algumas tarefas corriqueiras, já agendadas, como padrão.

Se você quiser saber o estado do seu crond, rode o seguinte comando:

ps aux | grep crond

O meu resultado foi este:

root 311 0.0 0.7 1284 112 ? S Dec24 0:00 crond

2914659 20624 0.0 0.0 112364 856 pts/1 SN+ 12:49 0:00 grep crond

A primeira linha, indica que o crond está sendo executado no meu sistema.

Se ele não estiver rodando no seu sistema, ou ele foi desligado (por você ou outro usuário) ou apenas nem foi iniciado.

Para iniciá-lo, você pode adicionar a linha crond a um dos scripts de inicialização ou rodar o aplicativo manualmente, como root:

crond

como usar o cron

Dentro do diretório /etc/, é possível encontrar subdiretórios chamados cron.hourly/, cron.weekly/, cron.daily/, cron.monthly/. O princípio é simples, assim – ao copiar um script para dentro de um destes diretórios, ele será executado a cada hora (hourly), a cada semana(weekly), a cada mês (monthly). A frequência com que o script será executado, depende do nome do diretório, portanto.

É possível ter mais flexibilidade no modo como a tarefa será executada, através da edição do arquivo /etc/crontab. Em um típico servidor Debian, este arquivo tem a seguinte aparência:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin</p>
<p># m h dom mon dow user	command
17 *	* * *	root    cd / &amp;&amp; run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / &amp;&amp; run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / &amp;&amp; run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / &amp;&amp; run-parts --report /etc/cron.monthly )
#

Você pode verificar o arquivo, no seu sistema, com o seguinte comando:

cat /etc/crontab

explicando o arquivo crontab

As primeiras linhas, do arquivo, definem algumas variáveis usadas pelo cron. A segunda parte é a que exige um pouco mais de atenção. Vamos usar tabela para explicar a linha

# m h dom mon dow user	command
Item Descrição
m ou minute minuto – determina a quantos minutos, dentro de uma hora, o comando será executado. Os valores aceitos vão de 0 a 59.
h ou hour hora – determina a que hora o comando será executado e sua especificação segue o padrão 24h. Portanto, aceita valores entre 0 e 23 (sendo que 0 é meia-noite).
dom ou day of month dia do mês – determina o dia do mês em que o comando será executado. Se quiser que a tarefa seja executada no dia 25 do mês, use o valor 25.
mon ou month mês – determina o mês em que o comando será executado. Aceita tanto valores numéricos referentes aos meses do ano, como alfabéticos (e. g. August).
dow ou day of week dia da semana – aceita tanto valores numéricos de 0 a 7, como caracteres: sun, mon, tue, wed, thu, fri e sat, que correspondem, respectivamente a domingo, segunda, terça, quarta, quinta, sexta e sábado.
user usuário – determina o usuário do sistema sob cujos privilégios o comando irá ser executado
cmd ou command comando – determina o comando a ser executado.

Notas:

  • Nos campos em que você não deseja fixar valor algum, pode inserir um asterisco ‘*’.
  • No campo dow, dia da semana, tanto 0 como 7 correspondem a domingo
  • Caso você determine valores para dom e para dow, o sistema não entra em conflito. O cron executa o comando nos dois casos
  • O Vixie Cron aceita listas. O que significa que você pode enumerar especificamente, por exemplo, os dias da semana em que você deseja que um script seja disparado. Veja um exemplo:
    59 11 * * 1,2,3,4,5 root backup.sh

    irá executar o script backup.sh toda segunda, terça, quarta, quinta e sexta, às 11:59

  • Se você preferir, pode usar assim:
    59 11 * * 1-5 root backup.sh

    onde 1 – 5 significa de segunda a sexta

  • Você também pode “pular” números. Veja como:
  • se você usar o valor */2 no campo dom, o comando irá rodar a cada 2 dias.
  • */5, no campo de horas, fará com que o comando seja executado a cada 5 horas
  • Os nomes dos meses e dos dias da semana não são sensíveis à caixa. Ou seja, tanto faz escrever Jul como jul. O importante é que você use apenas as 3 primeiras letras do dia da semana ou do nome do mês.
  • Você pode (e deve) inserir comentários para explicar o que está fazendo. Para isto, basta usar um ‘#’ no início da linha comentada.

O crontab é multiusuário

O Unix é um sistema, por natureza, multiusuário. Cada usuário que se conecta ao sistema pode, em tese, programar as próprias tarefas a serem executadas pelo sistema.

Assim, você, que tem um blog WordPress instalado em um servidor – que te forneça acesso SSH – pode programar um backup e determinar a frequência com que ele irá ocorrer.

Para começar a personalizar o seu próprio crontab, use o comando:

crontab -e

O sistema irá abrir o seu editor de textos padrão (o meu é o nano).

Se você quiser usar o nano também, para editar o crontab execute o seguinte comando:

export EDITOR=nano

Note que o seu crontab “particular” segue os padrões do arquivo /etc/crontab do sistema.

Uma vez terminada a edição, o cron faz a verificação sintática e permite corrigir possíveis erros. Se tudo estiver bem, é só deixar rolar.

Outros editores de texto

Usuários que se sintam mais confortáveis com outros editores de texto, podem faze a edição no aplicativo da sua preferência.

Depois de concluído, é só usar o comando crontab para substituir o seu arquivo crontab atual pelo arquivo que você acabou de criar.

Vamos supor que você tenha escrito as definições em um arquivo chamado meu.arquivo.cron, o comando a ser usado é o seguinte:

crontab meu.arquivo.cron

Outros usos

Para listar as definições atuais do crontab:

crontab -l

Para apagar e remover o seu crontab atual:

crontab -r

Como restringir acesso ao crontab

Quem é administrador de um sistema pode impedir que usuários tenham acesso ao cron. Você pode inserir, no arquivo /etc/cron.allow os usuários que têm permissão de alterar o crontab. O arquivo /etc/cron.deny é onde são inscritos os usuários que terão seu acesso negado ao serviço.

Uma maneira de restringir quase todos e permitir o acesso a alguns é adicionar a linha ALL ao /etc/cron.deny e ir acrescentando um a um os usuários aos quais você deseja liberar o acesso em /etc/cron.allow.

Veja como restringir o acesso de todo mundo ao serviço:

echo ALL &gt;&gt; /etc/cron.deny

Para permitir o acesso à usuária sandrinha, use o comando:

echo sandrinha &gt;&gt; /etc/cron.allow

Na ausência de qualquer um destes dois arquivos, o uso do cron, no sistema, é irrestrito — ou seja, todo mundo pode usar.

Se você tiver apenas o arquivo /etc/cron.allow e, nele, inscrever a usuária sandrinha, o sistema vai entender que todos os outros usuários estão proibidos e somente esta poderá fazer uso do serviço.

Com estas dicas básicas, você já estará habilitado a administrar as tarefas programadas no seu sistema. Mais informações podem ser encontradas com o comando man crontab.

Have fun!