我想自动运行此命令(这很简单):
~/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