默认自定义申请的证书 免费时间为90天 一般默认2个月就去申请更新一下
业务服务域名 最好选择晚上 因为脚本内会停止nginx访问 不过也很快
脚本内自动去更新 更新后 推送到手机上通知
pythonimport psutil # pip install psutil
import subprocess
import requests
# 推送给我的手机 以便知道是否更新成功
def push_deer_func():
title = "SSL證書延期"
content = f"""
[IP] 154.**.**.66 \n
[域名] [www] baidu \n
[内容] 證書延期執行 renew
"""
pushKey = "PDU25561Th********Jf0dsZgH"
data = {"text": title, "desp": content, "type": "markdown", "pushkey": pushKey}
url = 'https://api2.pushdeer.com/message/push'
response = requests.post(url, data=data).json()
# 查找占用端口80的进程
def find_process_using_port(port):
for conn in psutil.net_connections():
if conn.laddr.port == port:
return psutil.Process(conn.pid)
return None
# 停止指定进程
def stop_process(process):
if process:
process.terminate()
# 更新SSL证书
def update_ssl():
# subprocess.run(["sudo", "certbot", "renew", "--force-renewal"])
# 执行 Certbot 更新
subprocess.run(["sudo", "certbot", "renew", "--quiet"], check=True)
# 重新启动Nginx服务
def restart_nginx():
subprocess.run(["sudo", "service", "nginx", "restart"])
push_deer_func()
# 主程序
if __name__ == "__main__":
# 查找占用端口80的进程
process = find_process_using_port(80)
if process:
print(f"找到占用端口80的进程:{process.name()}")
# 停止占用端口80的进程
stop_process(process)
print("已成功停止占用端口80的进程")
# 更新SSL证书
print("更新SSL证书...")
update_ssl()
print("SSL证书已更新")
# 重新启动Nginx服务
print("重新启动Nginx服务...")
restart_nginx()
print("Nginx服务已重新启动")
else:
print("未找到占用端口80的进程")
此方式使用方法自行百度
shell0 9 1 */2 * /usr/bin/python3 /home/script_job/check_renew.py 0 9 1 */2 *:这是 cron 表达式的时间部分,定义了何时运行命令或脚本。 0:分钟字段,表示在每小时的第 0 分钟。 9:小时字段,表示在每天的第 9 小时(也就是早上 9 点)。 1:日期字段,表示每月的第 1 天。 */2:月份字段,表示每两个月。* 表示任何月份,/2 表示步长为 2,所以这个字段表示每两个月。 *:星期字段,表示每星期。 /usr/bin/python3 /home/script_job/check_renew.py:这是命令部分,表示需要执行的命令或脚本。 这里的命令是使用 /usr/bin/python3(Python3 的路径) 来执行位于 /home/script_job/check_renew.py 的 Python 脚本。
本文作者:Freed
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!