crontab

每多少天执行命令

今天证书有到了更新的日期,在我多次修改后,证书是正常更新了,但是今天一看这个日期有点问题,下次 22号到期,续更的时间是25号,有点不太智能。于是乎就开始了改造之路。
在改造过程中查阅相关资料通过crontab + 脚本的方式来实现

1.写crontab命令

每分钟执行一次命令,命令如下

* * * * * nohup /bin/bash /~/renew_cert.sh > /~/log/renew_cert.log 2>&1

最优解应该是每秒执行一次,但是crontab不支持秒级任务,只能暂时这样了

2.写脚本

编辑 renew_cert.sh ,文件内容如下

#! /bin/bash -x
last_run_time=1585061207       //你任务上次执行的时间戳
current=`date "+%Y-%m-%d %H:%M:%S"`     
curr_run_time=`date -d "$current" +%s`  //当前时间戳

seconds=$((90*24*3600))   //时间间隔 单位秒

echo $current
//时间是否满足要求
if [[ $((curr_run_time - last_run_time)) -ge $seconds ]]
then
    nohup certbot renew > /~/log/https/`date +"%Y%m%d%H%M%S"` 2>&1
    echo 重新申请证书成功
    nohup /usr/local/nginx/sbin/nginx -s reload > /~/log/nginx/`date +"%Y%m%d%H%M%S"` 2>&1  //nginx 重新加载配置文件
    echo 服务器重新加载成功
    sed -i "s/$last_run_time/$curr_run_time/" /~/renew_cert.sh   //修改下上次执行的时间戳
    echo 最近执行时间替换成功
fi

上面的脚本就能基本自动完成Let’s Encrypt证书的续期了
关于https 证书请移步给自己的站点加上https——为自己的域名加上一把绿色的小锁