# _*_coding=utf-8 _*_
# @author 云深沾衣
# @date 2021/11/5 16:33
import re
import subprocess
from datetime import datetime
import requests
class DomainCheck:
def __init__(self, domain_file='domain_file.txt', log_file='log.txt'):
self.domain_file = domain_file
self.log_file = log_file
check_days = 5
dingding_token = 'your_dingding_token'
dingding_url = 'https://oapi.dingtalk.com/robot/send?access_token='
def check_domain_ssl_status(self):
with open(self.domain_file) as f:
self.write_log_to_file('<------ ' + str(datetime.now()) + ' ------>' + '\n')
for line in f:
line = line.replace('\n', '').replace('\r', '').strip()
if not line.startswith("#") and len(line) > 0:
expire_date = self.get_cert_expire_date(line)
content = line + ' : ' + str(expire_date) + '\n'
self.write_log_to_file(content)
if expire_date <= self.check_days:
self.send_to_dingding(content)
def send_to_dingding(self, content):
content_data = {
"msgtype": "text",
"text": {
"content": content
}
}
requests.post(self.dingding_url + self.dingding_token, json=content_data)
def write_log_to_file(self, content):
with open(self.log_file, mode='a') as f:
f.write(content)
@staticmethod
def parse_time(date_str):
return datetime.strptime(date_str, "%b %d %H:%M:%S %Y GMT")
@staticmethod
def get_re_match_result(pattern, string):
match = re.search(pattern, string)
return match.group(1)
def get_cert_info(self, domain):
"""获取证书信息"""
cmd = f"curl -Ivs https://{domain} --connect-timeout 10" # 这儿的 curl 应该使用最新版
exitcode, output = subprocess.getstatusoutput(cmd)
try:
expire_date = self.get_re_match_result('expire date: (.*)', output)
except:
content = domain + ": This domain check failed , please check reason"
self.send_to_dingding(content)
expire_date = "Aug 7 00:28:51 2020 GMT"
expire_date = self.parse_time(expire_date)
return expire_date
def get_cert_expire_date(self, domain):
"""获取证书剩余时间"""
expire_date = self.get_cert_info(domain)
# 剩余天数
return (expire_date - datetime.now()).days
domain_check = DomainCheck('/opt/sh/text.txt', '/opt/sh/log.txt')
domain_check.check_domain_ssl_status()
RabbitMQ镜像集群部署
以下为准备的服务器信息
服务器ip | 服务器名称 |
---|---|
192.168.19.10 | mq01 |
192.168.19.11 | mq02 |
在两台服务器分别安装 RabbitMQ 参考 rabbitmq安装与使用
在两台服务器里面的 ‘/etc/hosts’ 里面绑定以下内容
192.168.19.10 mq01
192.168.19.11 mq02
修改 “/var/lib/rabbitmq/.erlang.cookie” 里面的内容,保证 里面的内容一致,并且权限为 400
在第二台服务器里面运行以下命令,将第二台服务器加入到集群中
service rabbitmq-server restart
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@mq01
rabbitmqctl start_app
使用以下命令给 test 创建一个镜像集群
rabbitmqctl add_vhost test
rabbitmqctl set_policy -p test ha "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
节点的移除使用以下命令:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
参考链接: https://www.jianshu.com/p/a031c7d53333
使用git方式更新还原代码脚本
- 因为工作需要,需要使用shell通过git来更新还原代码
#/bin/bash
CURRENTTIME=`date +%Y%m%d%H%M`
ADMINDIR=/data/develop/hicoopay/admin/
ADMINBACKUPDIR=/root/backup/admin/
ADSDIR=/data/develop/hicoopay/ads/
ADSBACKUPDIR=/root/backup/ads/
update_admin(){
[ ! -d ${ADMINBACKUPDIR} ] && mkdir -p ${ADMINBACKUPDIR}
rsync -avz --exclude=runtime/logs ${ADMINDIR} ${ADMINBACKUPDIR}${CURRENTTIME}
cd ${ADMINDIR}
git checkout . && git pull
}
update_ads(){
[ ! -d ${ADSBACKUPDIR} ] && mkdir -p ${ADSBACKUPDIR}
rsync -avz --exclude=storage/logs ${ADSDIR} ${ADSBACKUPDIR}${CURRENTTIME}
cd ${ADSDIR}
git checkout . && git pull
}
rollback_admin(){
echo -e "\033[33m 选择你需要还原的日期 : \033[0m"
select var in `ls ${ADMINBACKUPDIR}`
do
rsync -avz --delete --exclude=runtime/logs ${ADMINBACKUPDIR}${var}/ ${ADMINDIR}
exit
done
}
rollback_ads(){
echo -e "\033[33m 选择你需要还原的日期 : \033[0m"
select var in `ls ${ADSBACKUPDIR}`
do
rsync -avz --delete --exclude=storage/logs ${ADSBACKUPDIR}${var}/ ${ADSDIR}
exit
done
}
admin(){
echo -e "\033[32m 选择你是要更新还是回滚 : \033[0m"
select i in "update" "rollback" "Exit"
do
case $i in
"update")
update_admin
exit
;;
"rollback")
rollback_admin
exit
;;
"Exit")
exit
;;
*)
echo "Please choose 1 || 2 || 3"
;;
esac
done
}
ads(){
echo -e "\033[32m 选择你是要更新还是回滚 : \033[0m"
select i in "update" "rollback" "Exit"
do
case $i in
"update")
update_ads
exit
;;
"rollback")
rollback_ads
exit
;;
"Exit")
exit
;;
*)
echo "Please choose 1 || 2 || 3"
;;
esac
done
}
echo -e "\033[32m 选择你需要操作的项目 : \033[0m"
select var in "admin" "ads" "Exit"
do
case $var in
"admin")
admin
exit
;;
"ads")
ads
exit
;;
"Exit")
exit
;;
*)
echo "Please chose 1 || 2 || 3 "
;;
esac
done