Linux
檢查日期是否在下週內
嘗試使用 LetsEncrypt 創建用於自動續訂 SSL 的腳本。
每日腳本首先檢查 SSL 何時到期:
response="$(openssl x509 -enddate -noout -in ~/letsencrypt/www.mydomain.com/cert.pem)"
$response
是notAfter=May 9 19:27:44 2018 GMT
我希望它與今天的日期進行比較並檢查時差是否小於或等於 7 天。虛擬碼:
if [$response is less than 7 days away from today] then cd ~/letsencrypt $$ ~/dehydrated/dehydrated --cron --domain www.mydomain.com --out . --challenge http-01
我該怎麼做呢?
我試圖通過轉換
$response
為更可行的格式,date -d
但出現date: extra operand ‘19:27:44’
錯誤。
我將解決您的實際問題,而不是您提出的具體問題:
dehydrated --cron
已經為您檢查日期。文件:
--cron
(-c
) 簽署/更新不存在/更改/過期的證書。程式碼:
# Check expire date of existing certificate if [[ -e "${cert}" ]]; then echo " + Checking expire date of existing cert..." valid="$("${OPENSSL}" x509 -enddate -noout -in "${cert}" | cut -d= -f2- )" printf " + Valid till %s " "${valid}" if "${OPENSSL}" x509 -checkend $((RENEW_DAYS * 86400)) -noout -in "${cert}"; then printf "(Longer than %d days). " "${RENEW_DAYS}" if [[ "${force_renew}" = "yes" ]]; then echo "Ignoring because renew was forced!" else # Certificate-Names unchanged and cert is still valid echo "Skipping renew!"
(https://github.com/lukas2511/dehydrated/blob/master/dehydrated#L1234-L1253)
RENEW_DAYS
似乎預設為 30,但您可以使用配置文件覆蓋它;引用文件:dehydrad 正在幾個不同的地方尋找一個配置文件,它會使用它可以按以下順序找到的第一個配置文件:
/etc/dehydrated/config
/usr/local/etc/dehydrated/config
- 你的 shell 的目前工作目錄
- 執行脫水的目錄
那裡的範例配置文件包含以下行:
# Minimum days before expiration to automatically renew certificate (default: 30) #RENEW_DAYS="30"
例如,要將值從預設的 30 天降低到 7 天,您可以將第二行編輯為:
RENEW_DAYS="7"