Как оптимизировать скрипт?

СУТЬ скрипта не висеть на кроне центботу, а именно мониторить каждую минуту возможность выпустить сертификат новому сайту ( поскольку не все они после переноса едут со своими ключами, как следствие не доступны по https) Нужно минимизировать простой сайта. Ну и генерить штатным методом.

ЗАДАЧА скрипта составить список сайтов на сервере >
проверить А запись идет ли на данный сервер>
Если да то проверить сертификат >
если меньше 10 дней в запасе то >
запустить проверку сможет ли выпуститься сертификат,
Если да то запустить механизм Bitrix VM для штатной генерации сертификата ( использует не certbot и не умеет -dry--run)

Что пропустил:
есть еще сайты с www и их тоже нужно прогнать по той же схеме в идеале они должны быть в том же массиве, поскольку было бы правельно генерить
-d site.ru -d www.site.ru, но можно и по отдельности.
Я вижу пока только дважды скопировать скрипт и прогонять второй раз,но мне сдается есть более приемлемый вариант.
Ну и так если у кого есть идеи как сделать его поприличней ;)

#!/bin/bash
clear
# получаем список реальных сайтов на сервере
lsl=`find /etc/httpd/bx/conf -name "bx_ext*" | sed  's/\/etc\/httpd\/bx\/conf\/bx_ext_//g' | sed 's/\.conf//g'`
for variable in $lsl
do
	# Пингуем сайты  
	ping -c 1 "$variable" 2>/dev/null  | grep -e $(/sbin/ifconfig | sed -n '2 p' | awk '{print $2}')  &> /dev/null && variable_ping_ok=$variable || variable_ping_ok="failed ip" 
    #и исключаем   А записи которых ведут на другой сервер
	if [[  $variable_ping_ok !=  "failed ip" ]]; then
valid_days=$(($(date -d "$(curl -sIv https://$variable_ping_ok |& grep "expire date:" | sed -e 's/\(.*\)expire date: //g')" +%j)-$(date +%j))) 
    # смотрим сколько дней осталось до конца сертификата, и смотрим больше ли это 10 дней.
if [[ "10" > "$valid_dayb" ]]
then
certbot certonly --dry-run  -m letsencrypt@$variable_ping_ok --webroot -w /home/bitrix/sites/$variable_ping_ok -d $variable_ping_ok -d www.$variable_ping_ok &> /dev/null && sudo -u root /opt/webdir/bin/bx-sites -a configure_le --site $variable_ping_o --email le@$variable_ping_o --dns $variable_ping_o -o json
	#echo "$variable_ping_ok $valid_days  можно выпустить сертификат "
fi
else echo "$variable_ping_ok $valid_days  не нужно  "
fi

done
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
Мелочи оптимизации - комментарии теперь на плохом английском.
Стиль циклов теперь одинаковая
убрана лишняя переменная lsl
Самое важное - изменения в "10" > "$valid_dayb"
Знаки больше и меньше сравнивают не числа, а строки, для чисел надо использовать -gt, -ge, -lt, -le
поправил на "$valid_dayb" -le 10

#!/bin/bash
clear
# getting list of real web-sites in httpd configuration
for variable in $(find /etc/httpd/bx/conf -name "bx_ext*" | sed  's/\/etc\/httpd\/bx\/conf\/bx_ext_//g' | sed 's/\.conf//g' )
do
  # pinging sites
  ping -c 1 "$variable" 2>/dev/null  | grep -e $(/sbin/ifconfig | sed -n '2 p' | awk '{print $2}')  &> /dev/null && variable_ping_ok=$variable || variable_ping_ok="failed ip" 
  # skip A-records, which points to another server
  if [[ $variable_ping_ok !=  "failed ip" ]]; then
    valid_days=$(($(date -d "$(curl -sIv https://$variable_ping_ok |& grep "expire date:" | sed -e 's/\(.*\)expire date: //g')" +%j)-$(date +%j)))
    # check how many days till certificate expiration and if less then 10, requesting new cert.
    if [[ "$valid_dayb" -le 10 ]]; then
      echo "$variable_ping_ok $valid_days requesting new certificate"
      certbot certonly --dry-run  -m letsencrypt@$variable_ping_ok --webroot -w /home/bitrix/sites/$variable_ping_ok -d $variable_ping_ok -d www.$variable_ping_ok &> /dev/null && sudo -u root /opt/webdir/bin/bx-sites -a configure_le --site $variable_ping_o --email le@$variable_ping_o --dns $variable_ping_o -o json
    fi
  else
    echo "$variable_ping_ok $valid_days current certificate is ok"
  fi
done
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы