Shell script - Ajuda [RESOLVIDO]

1. Shell script - Ajuda [RESOLVIDO]

Osvaldo Smera Neto
tuphiq

(usa CentOS)

Enviado em 11/02/2020 - 11:15h

Pessoal, estou tentando fazer um shell script que monitora os recursos da máquina e do asterisk de vários servidores. Funciona muito bem quando executo manualmente, mas quando é executado pela cron apenas os dados asterisk nao são coletados. Verifiquei as permissões e está ok.

O script é simples e apenas captura variáveis para inserir em um BD. Seguem abaixo apenas algumas linhas:

#!/bin/bash
freeMem=$(free -m| grep "Mem:" | awk '{print $4}')
calls=$(asterisk -rx 'core show channels'| grep "active call" | awk '{print $1}')

Quando executado pela cron, apenas a variavel 'freeMem' é coletada. manualmente as duas são coletadas e a inserção no BD funciona.





  


2. Re: Shell script - Ajuda [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 11/02/2020 - 16:20h


tuphiq escreveu:

Pessoal, estou tentando fazer um shell script que monitora os recursos da máquina e do asterisk de vários servidores. Funciona muito bem quando executo manualmente, mas quando é executado pela cron apenas os dados asterisk nao são coletados. Verifiquei as permissões e está ok.

O script é simples e apenas captura variáveis para inserir em um BD. Seguem abaixo apenas algumas linhas:

#!/bin/bash
freeMem=$(free -m| grep "Mem:" | awk '{print $4}')
calls=$(asterisk -rx 'core show channels'| grep "active call" | awk '{print $1}')

Quando executado pela cron, apenas a variavel 'freeMem' é coletada. manualmente as duas são coletadas e a inserção no BD funciona.

Boa tarde.
Partindo do principio que a variável freeMem é coletada, o problema não é com o caminho do grep nem do awk,
logo, por eliminação, "pode" ser o caminho do "asterisk",
Para efeito de testes, coloque o caminho completo, exemplo
/usr/bin/asterisk
Dica:
freeMem=$(free -m|awk '/^Mem/ {print $4}')


______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


3. Re: Shell script - Ajuda

Paulo
paulo1205

(usa Ubuntu)

Enviado em 12/02/2020 - 01:39h

Pode ser por causa do que o msoliver falou, mas pode ser também por conta de alguma discrepância em valores de variáveis de ambiente entre o momento do login interativo (especialmente se for via SSH ou outra forma de acesso remoto) e o momento em que o crontab é processado pelo cron.

Em particular, algumas fontes muito comuns de problemas por discrepância de ambiente são as variáveis:

  • PATH, que controla diretórios em que os executáveis são buscados, caso você não especifique seus caminhos completos,

  • USER e HOME, que informam quem está logado no terminal e qual o caminho do diretório de dados padrão (quando você usa su ou sudo, dependendo do modo como os invoca, os valores dessas variáveis podem permanecer aqueles de quem efetuou login, em vez de ser trocados para os do usuário alvo da escalação de privilégio ou troca de credenciais),

  • LANG, LC_ALL, LC_MESSAGES e outras da família de LC_…, que controlam configurações regionais e de idioma, e que podem afetar a saída produzida pelos comandos executados, o que é particularmente importante se você capturar e comparar tais saídas com valores fixos.

Para evitar problemas com variáveis de ambiente, é interessante que você faça com que seu script tenha todas as variáveis que podem afetar a execução dos comandos com valores conhecidos no momento da execução, e a melhor forma de garantir isso é atribuir valores a tais variáveis, em lugar de os receber (ou deixar de receber) a partir do ambiente de execução.

Na minha experiência pessoal e em fóruns como este, o minimamente recomendado é que você fixe, no início do script, pelo menos os valores de PATH (que deve ser o mais minimalista possível, a fim de aumentar a segurança e o desempenho) e de LC_ALL (que deve preferir a locale mais universal possível, que quase sempre é a locale "C").


... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)


4. Re: Shell script - Ajuda [RESOLVIDO]

Osvaldo Smera Neto
tuphiq

(usa CentOS)

Enviado em 12/02/2020 - 16:20h


Isso mesmo paulo1205.
Antes de ler sua resposta, vi em alguns fóruns a mesma dica. No crontab não havia as linhas de path. uso o Centos 7 e usei as seguintes linhas:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

Agora funciona normalmente. Obrigado a todos pela ajuda.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts