- #!/bin/bash
-
- LANG=C
- date=$(date -d "today" +"%Y-%m-%d %H:%M:%S")
- BIND_VIP1=192.168.16.238
- BIND_VIP2=192.168.16.239
- WEB_IP_RIP1=192.168.16.240
- WEB_IP_RIP2=192.168.16.241
- NETMASK=255.255.255.0
- GATEWAY=192.168.16.1
- BROADCAST=219.232.254.255
- function_bind_vip1()
- {
- /sbin/ifconfig eth0:ha1 ${BIND_VIP1} broadcast ${BROADCAST} netmask ${NETMASK} up
- /sbin/route add -host ${GATEWAY} dev eth0:ha1
- }
-
-
- function_bind_vip2()
- {
- /sbin/ifconfig eth0:ha2 ${BIND_VIP2} broadcast ${BROADCAST} netmask ${NETMASK} up
- /sbin/route add -host ${GATEWAY} dev eth0:ha2
- }
-
- function_restart_nginx()
- {
- kill -USR1 `cat /var/log/nginx/nginx.pid`
- }
-
- function_remove_vip1()
- {
- /sbin/ifconfig eth0:ha1 ${BIND_VIP1} broadcast ${BROADCAST} netmask ${NETMASK} down
- }
-
- function_remove_vip2()
- {
- /sbin/ifconfig eth0:ha2 ${BIND_VIP2} broadcast ${BROADCAST} netmask ${NETMASK} down
- }
-
- function_vip_arping1()
- {
- /sbin/arping -I eth0 -c 3 -s ${BIND_VIP1} ${GATEWAY} > /dev/null 2>&1
- }
-
- function_vip_arping2()
- {
- /sbin/arping -I eth0 -c 3 -s ${BIND_VIP2} ${GATEWAY} > /dev/null 2>&1
- }
-
- bind_time_vip1="N";
- bind_time_vip2="N";
-
-
-
-
- while true
- do
- httpcode_rip1=`/usr/bin/curl -o /dev/null -s -w %{http_code} http://${WEB_IP_RIP1}/status.htm`
- httpcode_rip2=`/usr/bin/curl -o /dev/null -s -w %{http_code} http://${WEB_IP_RIP2}/status.htm`
- #vip1
- if [ x$httpcode_rip1 == "x200" ];
- then
- if [ $bind_time_vip1="N" ];
- then
- function_bind_vip1
- function_vip_arping1
- function_restart_nginx
- bind_time_vip1="Y"
- fi
- function_vip_arping1
- else
- if [ $bind_time_vip1 == "Y" ];
- then
-
-
- function_remove_vip1
- bind_time_vip1="N"
- fi
- fi
-
- #vip2
- if [ x$httpcode_rip2 == "x200" ];
- then
- if [ $bind_time_vip2="Y" ];
- then
- function_remove_vip2
- bind_time_vip2="N"
- fi
- else
- if [ $bind_time_vip2 == "N" ];
- then
- function_bind_vip2
- function_vip_arping2
- function_restart_nginx
- bind_time_vip2="Y"
- fi
- function_vip_arping2
- fi
- sleep 5
- done
主机2的脚本如下
cat nginx_loadbalance_vip2.sh
- #!/bin/bash
-
- LANG=C
- date=$(date -d "today" +"%Y-%m-%d %H:%M:%S")
- BIND_VIP1=192.168.16.239
- BIND_VIP2=192.168.16.238
- WEB_IP_RIP1=192.168.16.241
- WEB_IP_RIP2=192.168.16.240
- NETMASK=255.255.255.0
- GATEWAY=192.168.16.1
- BROADCAST=219.232.254.255
- function_bind_vip1()
- {
- /sbin/ifconfig eth0:ha1 ${BIND_VIP1} broadcast ${BROADCAST} netmask ${NETMASK} up
- /sbin/route add -host ${GATEWAY} dev eth0:ha1
- }
-
-
- function_bind_vip2()
- {
- /sbin/ifconfig eth0:ha2 ${BIND_VIP2} broadcast ${BROADCAST} netmask ${NETMASK} up
- /sbin/route add -host ${GATEWAY} dev eth0:ha2
- }
-
- function_restart_nginx()
- {
- kill -USR1 `cat /var/log/nginx/nginx.pid`
- }
-
- function_remove_vip1()
- {
- /sbin/ifconfig eth0:ha1 ${BIND_VIP1} broadcast ${BROADCAST} netmask ${NETMASK} down
- }
-
- function_remove_vip2()
- {
- /sbin/ifconfig eth0:ha2 ${BIND_VIP2} broadcast ${BROADCAST} netmask ${NETMASK} down
- }
-
- function_vip_arping1()
- {
- /sbin/arping -I eth0 -c 3 -s ${BIND_VIP1} ${GATEWAY} > /dev/null 2>&1
- }
-
- function_vip_arping2()
- {
- /sbin/arping -I eth0 -c 3 -s ${BIND_VIP2} ${GATEWAY} > /dev/null 2>&1
- }
-
- bind_time_vip1="N";
- bind_time_vip2="N";
-
-
-
-
- while true
- do
- httpcode_rip1=`/usr/bin/curl -o /dev/null -s -w %{http_code} http://${WEB_IP_RIP1}/status.htm`
- httpcode_rip2=`/usr/bin/curl -o /dev/null -s -w %{http_code} http://${WEB_IP_RIP2}/status.htm`
- #vip1
- if [ x$httpcode_rip1 == "x200" ];
- then
- if [ $bind_time_vip1="N" ];
- then
- function_bind_vip1
- function_vip_arping1
- function_restart_nginx
- bind_time_vip1="Y"
- fi
- function_vip_arping1
- else
- if [ $bind_time_vip1 == "Y" ];
- then
-
-
- function_remove_vip1
- bind_time_vip1="N"
- fi
- fi
-
- #vip2
- if [ x$httpcode_rip2 == "x200" ];
- then
- if [ $bind_time_vip2="Y" ];
- then
- function_remove_vip2
- bind_time_vip2="N"
- fi
- else
- if [ $bind_time_vip2 == "N" ];
- then
- function_bind_vip2
- function_vip_arping2
- function_restart_nginx
- bind_time_vip2="Y"
- fi
- function_vip_arping2
- fi
- sleep 5
- done
注意:本文来自于张宴的nginx书籍对双机热备的讲解,脚本也来自书中,本人对其有小小的改动,大家可以参看原书的详细内容我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声
首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有, 也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
A/ctohttp://wiki.nginx.org/CoreModule#usermaster进程曾经以root用户运行,是否可以以不同的用户运行nginxmaster进程? 最佳答案 只需以非root身份运行init脚本(即/etc/init.d/nginxstart),就可以用不同的用户运行nginxmaster进程。如果这真的是你想要做的,你将需要确保日志和pid目录(通常是/var/log/nginx&/var/run/nginx.pid)对该用户是可写的,并且您所有的listen调用都是针对大于1024的端口(因为绑定(
我有一个应用程序正在从Ruby迁移到JRuby(由于需要通过Java提供更好的Web服务安全支持)。我使用的gem之一是daemons创建后台作业。问题在于它使用fork+exec来创建后台进程,但这对JRuby来说是禁忌。那么-是否有用于创建后台作业的替代gem/wrapper?我目前的想法是只从shell脚本调用rake并让rake任务永远运行......提前致谢,克里斯。更新我们目前正在使用几个与Java线程相关的包装器,即https://github.com/jmettraux/rufus-scheduler和https://github.com/philostler/acts
原始问题Letd(n)bedefinedasthesumofproperdivisorsofn(numberslessthannwhichdivideevenlyinton).Ifd(a)=bandd(b)=a,whereab,thenaandbareanamicablepairandeachofaandbarecalledamicablenumbers.Forexample,theproperdivisorsof220are1,2,4,5,10,11,20,22,44,55and110;therefored(220)=284.Theproperdivisorsof284are1,2,
我的rails3.1.6应用程序中有一个自定义访问器方法,它为一个属性分配一个值,即使该值不存在。my_attr属性是一个序列化的哈希,除非为空白,否则应与给定值合并指定了值,在这种情况下,它将当前值设置为空值。(添加了检查以确保值是它们应该的值,但为简洁起见被删除,因为它们不是我的问题的一部分。)我的setter定义为:defmy_attr=(new_val)cur_val=read_attribute(:my_attr)#storecurrentvalue#makesureweareworkingwithahash,andresetvalueifablankvalueisgiven