Как в sh вычесть даты с разными часовыми поясами?

нужно следить за датой сертификата на сайте. ( openssl не подойдет потому как сертификат еще дожен быть валидно применен а не только наличиствовать)
curl -sIv https://letsencrypt.ks03.ru |& grep "expire date:" | sed -e 's/\(.*\)expire date: //g'

Вывод:

Nov 28 09:32:50 2019 GMT

Локальное время
date
Вывод
Fri Aug 30 14:08:04 MSK 2019

нужно убедиться что сертификат еще доступен скажем 10 дней. ( время удаляем, не нужно оно только дни)
тут мне пришло в голову что 24 часа вообще не существенны, так что часовые пояса вообще не нужны, все-равно с запасом следим.
Так что остается только вычесть даты
  • Вопрос задан
  • 150 просмотров
Решения вопроса 3
Radjah
@Radjah
Конвертируй вывод в нужный формат и сравнивай.
$ TZ=GMT date
Пт авг 30 12:13:14 GMT 2019

$ LC_ALL=C TZ=GMT date +%Y%m%d%H%M%S
20190830121541

$ LC_ALL=C TZ=GMT date --date="Nov 28 09:32:50 2019 GMT" +%Y%m%d%H%M%S
20191128093250


Или добавить в крон запуск "certbot renew" каждые два месяца, например.
Ответ написан
Комментировать
@zohan1993
devops
Можно посчитать сколько еще дней сертификат действителен, с помощью преобразования даты в день года:

# Expired day --> day of year
expired_day=$(date -d "$(curl -sIv https://letsencrypt.ks03.ru |& grep "expire date:" | sed 's/*  expire date: //')" +%j)

# Date --> day of year
day=$(date +%j) 

valid_days=$(($expired_day-$day))

# Debug
echo $expired_day
echo $day
echo $valid_days


Или так:

valid_days=$(($(date -d "$(curl -sIv https://letsencrypt.ks03.ru |& grep "expire date:" | sed 's/*  expire date: //')" +%j)-$(date +%j)))

# Debug
echo $valid_days
Ответ написан
Комментировать
@q2digger
никого не трогаю, починяю примус
Использую вот этот скрипт для контроля за сертификатами своих доменов.
https://github.com/Matty9191/ssl-cert-check
Следилка, уведомления, умеет брать кучу доменов из файла и все на обычном баше. Рекомендую.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
$EXPIRE=`curl -sIv https://letsencrypt.ks03.ru |& grep "expire date:" | sed -e 's/\(.*\)expire`
$ALERT_DATE=`date -I --date "$EXPIRE - 10 days"`
$NOW_DATE=`date -I`
expr "$ALERT_DATE" \< "$NOW_DATE" > /dev/null && notify

Волшебные параметры утилиты date: -I выводит дату без времени в сравниваемом как строку формате ISO но по местному часовому поясу, --date универсально съедает разные странные выражения.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы