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

СУТЬ скрипта не висеть на кроне центботу, а именно мониторить каждую минуту возможность выпустить сертификат новому сайту ( поскольку не все они после переноса едут со своими ключами, как следствие не доступны по 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
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега bash
build 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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
EXELO Омск
от 50 000 до 70 000 руб.
INCOMA Москва
До 100 000 руб.
Radyushin & Co Тольятти
от 80 000 до 160 000 руб.