首页 > 系统相关 >nginx同步脚本

nginx同步脚本

时间:2023-08-29 14:35:51浏览次数:52  
标签:脚本 同步 echo nginx usr conf local md5

  1. 检测nginx进程是否存在异常
    `#!/bin/bash

收集nginx进程pid

pid=$(ps -ef |grep nginx|grep worker|awk '{print $2}')

收集第一个nginx进程的pid,打上时间戳

pid0=$(ps -ef |grep nginx|grep worker|awk '{print $2}'|head -n 1)
starttime0=$(ps -o lstart= -p $pid0)
starttimestamp0=$(date -d "$starttime0" +%s)
result=""

判断每个pid是否与第一个的启动时间相等

for i in $pid ; do

starttime=$(ps -o lstart= -p $i)
starttimestamp=$(date -d "$starttime" +%s)

if [ $starttimestamp0 -eq $starttimestamp ];then 
	result+="ture"
else 
	result+="false"
fi

done

如果存在不同的则重载nginx

if [[ $result == "false" ]] ; then
echo "=发现nginx存在异常进程,正在重载="
/usr/sbin/nginx -s reload
else
echo "=nginx进程未发现异常="
fi
`

  1. 校验每个节点的配置是否一致
    `#!/bin/bash
    hosts=(18.12 18.13 18.14)

echo "=检测conf.d/下的文件="

for i in ${hosts[*]};do

递归计算目录中所有文件的MD5值

dir1="/usr/local/nginx/conf/conf.d"
dir2=ssh ${i} "cd /usr/local/nginx/conf/conf.d && pwd"
calculate_md5() {
local dir="$1"
find "$dir" -type f -exec md5sum {} ; | sort -k 2 | awk '{print $1}'
}

对比两个MD5列表是否一致

compare_md5() {
  local list1="$1"
  local list2="$2"
  temp_file1=$(mktemp)
  temp_file2=$(mktemp)
  echo "$list1" > "$temp_file1"
  echo "$list2" > "$temp_file2"
  diff "$temp_file1" "$temp_file2" >/dev/null
  rm -f "$temp_file1" "$temp_file2"
}

计算两个目录的MD5值并进行比较

md5_list1=$(calculate_md5 "$dir1")
md5_list2=$(calculate_md5 "$dir2")

if compare_md5 "$md5_list1" "$md5_list2"; then
echo "${i}的conf.d目录的文件一致"
else
echo "${i}的conf.d目录的文件不一致"
fi

done

echo "=检测nginx.conf="
Md5sum=md5sum /usr/local/nginx/conf/nginx.conf
echo -e "\n18.11nginx.conf的md5值:$Md5sum"
for i in ${hosts[*]};do

md5=`ssh ${i} "md5sum  /usr/local/nginx/conf/nginx.conf"`

if [ "$Md5sum"x = "$md5"x ]; then
    echo -e "\n${i}nginx.conf文件正常,正在重载"
    ssh ${i} "/usr/sbin/nginx -s reload"
    sleep 2
else
    echo -e "\n${i}nginx.conf文件异常,请排查!!"
    echo -e \n$md5
fi

done`

  1. 运行此脚本从svn更新配置,并调用上面两个脚本检测配置和进程
    `#!/bin/bash

svn update更新nginx配置

cd /usr/local/nginx/conf && svn up

hosts=(18.12 18.13 18.14)

for i in ${hosts[*]};do
echo $i
ssh $i "cd /usr/local/nginx/conf && svn up"
sleep 2
done

sleep 15

调用脚本检查nginx配置、重载配置

sh /root/checkng/check_ngconf.sh

调用脚本检查nginx进程是否异常,异常则重载

echo -e "\n=检查18.11进程是否异常="
sh /root/checkng/ng_reload_check.sh

for i in ${hosts[*]};do
echo -e "\n=检查$i进程是否异常="
ssh $i "sh /root/checkng/ng_reload_check.sh"
don`

标签:脚本,同步,echo,nginx,usr,conf,local,md5
From: https://www.cnblogs.com/zeno94/p/17664656.html

相关文章

  • 当某个excel工作簿的某个单元格的值发生变动时, 自动执行python某脚本, 如何实现?
    要实现当Excel工作簿中的某个单元格值发生变化时自动执行Python脚本,你可以考虑以下步骤:监视单元格变化:首先,你需要实现监视Excel工作簿中的特定单元格是否发生了变化。这可以通过使用VBA(VisualBasicforApplications)宏来实现。打开Excel工作簿,按下ALT+F11打开VBA编辑器,然后......
  • 数据库同步
    刚开始使用分页的方式同步数据,idasc到2000多万条之后,效率慢了。总结:分页到最后,会越来越慢通过请教大石头大佬,进行了优化大数据同步,一般不用分页的方式,XCode里面是把分页抽取器放在最后的。每次抽取后,下一次用whereid>lastMaxId。你可以参考XCode里面的集中抽取器,最好用的......
  • redis分布式锁,setnx+lua脚本的java实现
    1前言在现在工作中,为保障服务的高可用,应对单点故障、负载量过大等单机部署带来的问题,生产环境常用多机部署。为解决多机房部署导致的数据不一致问题,我们常会选择用分布式锁。目前其他比较常见的实现方案我列举在下面:基于缓存实现分布式锁(本文主要使用redis实现)基于数据库实......
  • redis分布式锁,setnx+lua脚本的java实现 | 京东物流技术团队
    1前言在现在工作中,为保障服务的高可用,应对单点故障、负载量过大等单机部署带来的问题,生产环境常用多机部署。为解决多机房部署导致的数据不一致问题,我们常会选择用分布式锁。目前其他比较常见的实现方案我列举在下面:基于缓存实现分布式锁(本文主要使用redis实现)基于数据库实现分布......
  • 深入剖析Nginx反向代理与负载均衡策略
    在现代网络架构中,Nginx作为一款高性能的Web服务器和反向代理服务器,扮演着重要角色。本篇博客将深入探讨Nginx的反向代理功能以及不同的负载均衡策略,帮助你更好地理解和应用这一技术。Nginx反向代理反向代理是一种服务器配置,它将客户端请求转发到后端服务器,并将后端服务器的响应返回......
  • 深入探究Java中的多线程并发与同步
    在后端开发中,多线程编程是一项关键技术,能够充分利用多核处理器,提高系统性能和响应能力。然而,多线程编程涉及到并发与同步问题,可能引发复杂的线程安全难题。本篇博客将深入探讨Java中的多线程编程,重点关注并发问题和同步机制。并发与多线程并发是指多个任务在同一时间段内执行,而多线......
  • 问题排查:nginx能跑,但是只能跑一会,不能跑多了
    背景上周都是查测试环境的问题,比如,我上一篇写的问题排查:nginx的反向代理感觉失效了一样,就是说这个事的。在文章里,最终查到是nginx的全连接队列满了(每个监听端口有个队列,完成三次握手的请求会进入这个监听端口的全连接队列,队列大小是只有128,比较小),我当时的解决方式,是把队列大小调......
  • bat 脚本
    @echooffsetlocalenabledelayedexpansionset"inputFile=rs.txt"set"outputFile=outputrs.txt"ifnotexist"%inputFile%"(echoInputfile"%inputFile%"notfound.exit/b)del"%outputFile%"2>nul......
  • 多线程同步、异步
    1、首先明确一点,对于单核CPU,任意一个时刻只有一个线程在运行。那么既然这样,多线程还有什么意义呢?举例来说,现在只有一个人,要做好几个任务。单线程就是,任务一个一个地做,必须做完一个任务后,再去做另一个任务。多线程就是一会做这个任务,一会做那个任务,每个任务做一会,不停的切换。显然,......
  • request请求但脚本爬取
    importrequestsfromlxmlimportetreeurl="https://duanzixing.com/"headers={'user-agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/116.0.0.0Safari/537.36Edg/116.0.1938.62�......