role-certbot/files/certbot-renewal.sh

59 lines
1.7 KiB
Bash
Raw Normal View History

2025-03-22 19:31:01 -05:00
#! /bin/bash
2025-03-29 22:02:27 -05:00
#should probably add logic to only halt/reload once (and only if necessary)
function halt() {
#stop services if necessary
if [ -d /var/lib/ipa/ ]
#stop httpd
systemctl stop httpd
fi
}
2025-03-22 20:14:26 -05:00
function reload() {
#reload/restart relevant services
if [ -d /etc/nginx/certs/ ]
then
systemctl reload nginx
fi
2025-03-29 22:02:27 -05:00
if [ -d /var/lib/ipa/ ]
#restart httpd
2025-03-29 22:05:36 -05:00
/scripts/setup-le.sh
2025-03-29 22:02:27 -05:00
systemctl start httpd
#load cert
fi
2025-03-22 20:14:26 -05:00
}
2025-03-22 19:31:01 -05:00
dom=`date +%d`
today=`date +%Y%m%d`
2025-03-22 19:40:20 -05:00
log=/var/log/certbot-renewal.log
echo Renewal attempt for $today >> $log
2025-03-22 20:00:26 -05:00
#rotate log file every month
if [[ $dom = 1 ]];then mv $log $log.bak;fi
2025-03-22 19:31:01 -05:00
for f in `ls /etc/letsencrypt/live/ --ignore "README"`
do
2025-03-22 19:40:20 -05:00
echo Checking $f >> $log
2025-03-22 19:31:01 -05:00
#check if cert has already expired or will expire within the next two days and renew if applicable
2025-03-22 19:51:05 -05:00
expires=$(echo `openssl x509 -enddate -noout -in /etc/letsencrypt/live/$f/cert.pem` " - 2 day" | grep -Po "(?<=notAfter=).*" | date +%Y%m%d -f -)
2025-03-22 19:31:01 -05:00
if [[ $today > $expires ]]
then
2025-03-22 19:40:20 -05:00
echo Certificate for $f is expired, renewing >> $log
2025-03-29 22:02:27 -05:00
halt()
2025-03-22 19:58:34 -05:00
certbot renew --cert-name $f >> /var/log/certbot-renewal.log
2025-03-22 20:14:26 -05:00
reload()
2025-03-22 19:58:34 -05:00
continue
2025-03-22 19:31:01 -05:00
fi
#convert hostname into day of month between 0 and 28 to renew on specific day of month (reduce chance of running out of cert renewals)
hash=$(echo $f| md5sum)
num=$((0x${hash%% *}))
for d in {0..2}
do
rdate=$(((${num#-}+$d)%28+1))
if [[ $dom -eq $rdate ]]
then
2025-03-22 19:40:20 -05:00
echo Date falls within renewal window for $f, attempting renewal >> $log
2025-03-29 22:02:27 -05:00
halt()
2025-03-22 19:58:34 -05:00
certbot renew --cert-name $f >> $log
2025-03-22 20:14:26 -05:00
reload()
2025-03-22 19:31:01 -05:00
break
fi
done
done