将命令链接到 LetsEncrypt 续订的结果

将命令链接到 LetsEncrypt 续订的结果

我想自动运行此命令(这很简单):

~/dehydrated/dehydrated --cron --domain www.mydomain.com --out . --challenge http-01

问题是,每次证书续订时,我都需要向当前的主机发送电子邮件,以便他们可以在后端实施更改(我知道效率非常低,但没有其他方法,因为只有他们具有 root 访问权限)。

当我运行上面的命令时,它会检查当前日期距离证书到期日期是否大于/小于 7 天。当时间差较大时会返​​回:

Processing www.mydomain.com
 + Checking domain name(s) of existing cert... unchanged.
 + Checking expire date of existing cert...
 + Valid till May  9 19:27:44 2018 GMT (Longer than 7 days). Skipping renew!

而当时间差较小时,它将更新证书。

我想做的就是让脚本每天运行。当输出为“Skipping renew”时,我希望它什么也不做并关闭,并且当证书更新,我想链接另一个命令(可能使用&&?)来向主机发送电子邮件。我已经在 python 中使用管理命令 ( python manage.py email_hosts) 设置了此命令。

答案1

~/dehydrated/dehydrated --cron --domain www.mydomain.com --out . --challenge http-01 | grep -q 'Skipping renew' || python manage.py email_hosts

解释

  • |:将初始命令的输出通过管道传输到下一个命令。这是假设它写入标准输出。
  • grep -q 'Skipping renew':在命令的输出中搜索Skipping renew管道之前|。以“安静”模式运行-q,即实际上不在命令行上显示匹配项。
  • ||如果上一个命令失败(即没有匹配项),则运行以下命令(即电子邮件)。这本质上是相反的&&。如果上一个命令匹配某些内容,则电子邮件命令将不会运行。

测试

您还可以使用如下命令测试命令流的逻辑:

echo 'Skipping renew' | grep -q 'Skipping renew' || echo Mailing
echo 'Something else' | grep -q 'Skipping renew' || echo Mailing

相关内容