
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 cron
deve ter caminhos absolutos porque cron
usando 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