Normalmente, costumo evitar reiniciar os serviços apenas para reiniciá-los, por vários motivos. Então aconselho apenas reiniciar o Apache quando o certificado for renovado .
Para o certbot, parece que você pode reiniciar o apache2 quando o certificado for renovado colocando um crontab:
certbot renew --renew-hook "apachectl -k graceful"
Você também pode encontrar a data em que você tem um novo certificado e só reiniciar o Apache.
Apenas para uma introdução ao tema, é assim que você pode verificar um certificado X.509 começando a data de validade:
$ openssl x509 -startdate -noout -in ZscalerChain.crt
notBefore=Jan 6 22:36:34 2015 GMT
ou para o período da época:
$ date --date $(openssl x509 -startdate -noout -in ZscalerChain.crt | awk -F"=" ' { print $2 } ') +%s
1420583794
Ou você pode trapacear e verificar as datas dos arquivos. Então, algo semelhante a isto:
FILE=~/tmp/savedate
CERT=~/yourcert.crt
if [ ! -f $FILE ]
then
touch --date="last year" $FILE
fi
DATE1=$(date -r $FILE +%s)
DATE2=$(date -r $CERT +%s)
if [ $DATE2 > $DATE1 ]
then
touch $FILE
sudo apachectl -k graceful
fi
Ou verificar a data de início do certificado X.509:
FILE=~/tmp/savedate
CERT=~/yourcert.crt
if [ ! -f $FILE ]
then
touch --date="last year" $FILE
fi
DATE1=$(date -r $FILE +%s)
DATE2=$(date --date $(openssl x509 -startdate -noout -in $CERT | awk -F"=" ' { print $2 } ') +%s)
if [ $DATE2 > $DATE1 ]
then
touch $FILE
sudo apachectl -k graceful
fi
Existem outras maneiras de fazer isso. Por exemplo, se for de extrema importância reiniciar o Apache assim que o certificado for renovado, você poderá monitorar a alteração do arquivo com inotify
e agir de acordo.