Letsencrypt falha na renovação automática do cron job

0

Estou executando um script fornecido por rehmatworks para instalar um certificado LetsEncrypt, que (além da instalação inicial ) configura um cronjob mensal para renovação automática. Tudo se instala bem, no entanto, a tarefa cron está falhando, e não consigo descobrir o porquê.

Aqui está a tarefa do cron (do root 'crontab -e'):

@monthly "sudo service nginx-sp stop && yes | letsencrypt --standalone renew &>/dev/null && service nginx-sp start && service nginx-sp reload"

Que falha com um erro not found :

/bin/sh: 1: sudo service nginx-sp stop && yes | letsencrypt --standalone renew &>/dev/null && service nginx-sp start && service nginx-sp reload: not found

A execução direta da linha de comando funciona bem:

sudo service nginx-sp stop && yes | letsencrypt --standalone renew &>/dev/null && service nginx-sp start && service nginx-sp reload

Alguma idéia de por que isso funciona na linha de comando, mas não no cron?

    
por Douglas McDonald 07.05.2018 / 22:16

3 respostas

0

Atualização: o rehmatworks atualizou o script original para resolver esse problema.

Graças aos comentários do @steeldriver acima, aprendi que o principal problema é:

  • O crontab deve ser executado usando 'bash' (não o padrão 'sh'), porque:
    • &>/dev/null é a sintaxe bash ('sh' seria >/dev/null 2>&1 ).
    • sh não reconhece comandos entre aspas (produz 'não erro encontrado).
  • O crontab deve definir as variáveis padrão do PATH.
  • Se o crontab for executado sob o comando root, não será necessário usar o 'sudo' (embora provavelmente não atrapalhe).

Para editar o crontask da raiz, use sudo crontab -e -u root . Final parece com isso:

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

@monthly service nginx-sp stop && yes | letsencrypt --standalone renew &>/dev/null && service nginx-sp start && service nginx-sp reload
#

Até agora, parece que funciona (mas confirme analisando os registros).

Observação: não testado, mas em termos de correção do script de instalação original, sem ter que definir o ambiente do shell separadamente , é possível que você envolvesse o comando cron em um subshell bash para garantir que ele seja executado no bash ( per askubuntu SE answer ):

bash -c "bashcommand"

    
por Douglas McDonald 10.05.2018 / 22:19
1

Tente especificar o caminho completo para os binários que você está usando. Eu acho que eles não são encontrados, pois a variável $ HOME ou $ PATH deve ser diferente da raiz e do usuário.

Se o que eu disse é o problema, a fonte dele deve ser a localização de letsencrypt binary, provavelmente não encontrada pelo root

    
por Manel Reis 07.05.2018 / 22:25
1

Isso já foi relatado como um problema para o provedor de scripts:

link

Então você deve esperar por uma resposta lá. Não é fácil dar uma resposta de qualidade se não soubermos o plano de fundo total do sistema, parece um ambiente especial.

Atualização: A questão é resolvida agora pelo Scriptowner no Github, por favor, confira o Github.  rehmatworks Comentou 11 horas atrás

Solução: Por favor, reclame o roteiro e você será capaz de fazer muito mais com facilidade.

desculpe chris

    
por WiKrIe 07.05.2018 / 22:39