Como ler o status do serviço em um script bash

Como ler o status do serviço em um script bash

Escrevi um script para monitorar um serviço específico no meu VPS. Esse serviço (clamd.amavisd) tende a ser encontrado inesperadamente morto e, quando isso acontece, meu serviço de e-mail é essencialmente interrompido.

Eu uso a seguinte instrução no script:

STATUS_QUERY_RESULT_STRING=$(service $SERVICE_NAME status)

O problema é que, quando executado a partir do terminal, o script recebe algo naquela variável (eu repeti em um arquivo para saber), mas infelizmente para mim, quando executado em um cron job, a variável fica vazia.

É óbvio que estou fazendo algo errado. Existe algum fator que não estou levando em consideração?

Responder1

ABSOLUTAMENTE tudo o que você está executando crondeve ter caminhos absolutos porque cronusando uma parte mínima de variáveis ​​de ambiente

   STATUS_QUERY_RESULT_STRING=$(/full/path/to/service $SERVICE_NAME status)

Na verdade, você pode definir em seu script os PATHs mais importantes que você precisa, como

   PATH=/bin:/usr/local/sbin 

mas se um dia você não descobrir que, por exemplo, o esperado lsé na verdade a queda de um hacker malicioso, use sempre caminhos absolutos

Atribua no início do seu script que você deseja usar algo assim

   CAT='/bin/cat'
   LS='/bin/ls'

e usá-lo como

  $LS -la /some/path
  $CAT /etc/passwd

informação relacionada