Encadeando um comando para o resultado da renovação do LetsEncrypt

0

Eu gostaria de automatizar a execução deste comando (o que é bastante simples):

~/dehydrated/dehydrated --cron --domain www.mydomain.com --out . --challenge http-01

O problema é que eu preciso enviar um e-mail ao meu host atual toda vez que os certificados forem renovados para que eles possam implementar as alterações no backend (muito ineficiente, eu sei, mas não há outra maneira, pois só eles têm acesso root).

Quando executo o comando acima, ele verifica se a data atual é maior ou menor que 7 dias a partir da data de expiração do certificado. Quando a diferença de tempo for maior, ele retornará:

Processing www.mydomain.com
 + Checking domain name(s) of existing cert... unchanged.
 + Checking expire date of existing cert...
 + Valid till May  9 19:27:44 2018 GMT (Longer than 7 days). Skipping renew!

Considerando que quando a diferença de tempo é menor, ele renovará os certificados.

O que eu gostaria de fazer é fazer o script rodar todos os dias. Quando a saída é "Ignorando Renovação" eu gostaria que não fizesse nada e fechasse, e quando os certificados fossem renovados, eu gostaria de encadear outro comando (talvez com && ?) que envia um email para os anfitriões. Eu já configurei este comando em python com um comando de gerenciamento ( python manage.py email_hosts ).

    
por DDiran 15.02.2018 / 10:23

1 resposta

0
~/dehydrated/dehydrated --cron --domain www.mydomain.com --out . --challenge http-01 | grep -q 'Skipping renew' || python manage.py email_hosts

Explicação

  • | : canaliza a saída do seu comando inicial para o próximo comando. Isso está assumindo que ele escreve para o padrão.
  • grep -q 'Skipping renew' : procure Skipping renew na saída do comando antes do canal | . Atue no modo "silencioso" -q , ou seja, não mostre a correspondência na linha de comando.
  • || Se o comando anterior falhar (ou seja, não houver correspondência), execute o seguinte comando (por exemplo, email). Isso é essencialmente o oposto de && . Se o comando anterior corresponder a algo, o comando de email não será executado.

Teste

Você também pode testar a lógica do fluxo de comando com algo como o seguinte:

echo 'Skipping renew' | grep -q 'Skipping renew' || echo Mailing
echo 'Something else' | grep -q 'Skipping renew' || echo Mailing
    
por 15.02.2018 / 10:28