shutdown

热重启golang服务器(graceful restart golang http server)

懵懂的女人 提交于 2020-03-04 20:09:45
原文: 热重启golang服务器(graceful restart golang http server) 服务端代码经常需要升级,对于线上系统的升级常用的做法是,通过前端的负载均衡(如nginx)来保证升级时至少有一个服务可用,依次(灰度)升级。 而另一种更方便的方法是在应用上做热重启,直接升级应用而不停服务。 原理 热重启的原理非常简单,但是涉及到一些系统调用以及父子进程之间文件句柄的传递等等细节比较多。 处理过程分为以下几个步骤: 监听信号(USR2) 收到信号时fork子进程(使用相同的启动命令),将服务监听的socket文件描述符传递给子进程 子进程监听父进程的socket,这个时候父进程和子进程都可以接收请求 子进程启动成功之后,父进程停止接收新的连接,等待旧连接处理完成(或超时) 父进程退出,升级完成 细节 父进程将socket文件描述符传递给子进程可以通过命令行,或者环境变量等 子进程启动时使用和父进程一样的命令行,对于golang来说用更新的可执行程序覆盖旧程序 server.Shutdown()优雅关闭方法是go1.8的新特性 server.Serve(l)方法在Shutdown时立即返回,Shutdown方法则阻塞至context完成,所以Shutdown的方法要写在主goroutine中 代码 代码部分加了些注释 package main import (

Linux学习笔记

我只是一个虾纸丫 提交于 2020-03-04 12:58:47
Linux学习文档 简介 Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。 Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。 系统启动过程 Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导。 运行 init。 系统初始化。 建立终端 。 用户登录系统。 init程序的类型: SysV: init, CentOS 5之前, 配置文件: /etc/inittab。 Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf。 Systemd: systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。 内核引导 当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。 运行级别 许多程序需要开机启动。它们在Windows叫做"服务"(service)

ubuntu常用命令

心已入冬 提交于 2020-03-04 00:50:23
重启命令 : 1、reboot 2、shutdown -r now 立刻重启 3、shutdown -r 10 过10分钟自动重启 4、shutdown -r 20:35 在时间为20:35时候重启 如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启 关机命令 : 1、halt 立刻关机(一般加-p 关闭电源) 2、poweroff 立刻关机 3、shutdown -h now 立刻关机 4、shutdown -h 10 10分钟后自动关机 在非root账户下执行命令,多一个sudo sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak Win10 与 Ubuntu18.04 之间实现粘贴复制 sudo apt install open-vm-tools sudo apt install open-vm-tools-desktop 修改主机名 sudo vim /etc/hostname 查看主机 uname -a 查看本机IP(需要安装net-tool:apt-get install net-tools) ifconfig 修改网络配置 vim /etc/netplan/50-cloud-init.yaml # 应用生效 netplan apply 切换用户 su 用户名(su root)

终止线程池线程的方法

北城余情 提交于 2020-03-02 17:17:48
终止线程池主要有两个方法:shutdown() 和 shutdownNow()。 shutdown()后线程池将变成shutdown状态,此时不接收新任务,但会处理完正在运行的 和 在阻塞队列中等待处理的任务。 shutdownNow()后线程池将变成stop状态,此时不接收新任务,不再处理在阻塞队列中等待的任务,还会尝试中断正在处理中的工作线程。 来源: oschina 链接: https://my.oschina.net/u/4167465/blog/3185227

Linux网络编程socket选项之SO_LINGER,SO_REUSEADDR

巧了我就是萌 提交于 2020-03-02 10:02:30
from http://blog.csdn.net/feiyinzilgd/article/details/5894300 Linux 网络编程中,socket的选项很多.其中几个比较重要的选项有:SO_LINGER(仅仅适用于TCP,SCTP), SO_REUSEADDR. SO_LINGER 在默认情况下,当调用close关闭socke的使用,close会立即返回,但是,如果send buffer中还有数据,系统会试着先把send buffer中的数据发送出去,然后close才返回. SO_LINGER选项则是用来修改这种默认操作的.于SO_LINGER相关联的一个结构体如下: [cpp] view plain copy print ? #include <sys/socket.h> struct linger { int l_onoff //0=off, nonzero=on(开关) int l_linger //linger time(延迟时间) } 当调用setsockopt之后,该选项产生的影响取决于linger结构体中 l_onoff和l_linger的值: 0 = l_onoff 当l_onoff被设置为0的时候,将会关闭SO_LINGER选项,即TCP或则SCTP保持默认操作:close立即返回.l_linger值被忽略. l_lineoff值非0,0 = l

Linux&&Tomcat

白昼怎懂夜的黑 提交于 2020-03-01 17:54:50
Linux&&Tomcat 动静分离 反向代理+负载均衡 部署Tomcat及其负载均衡 配置Tomcat站点 动静分离 静态文件(.html)交由LNMP服务器处理 动态文件(.php)交由LAMP服务器处理 web-1.1 #部署LNMP环境 #配置 vim /usr/local/nginx/conf/nginx.conf location ~ \.php$ { proxy_pass http://192.168.1.2 ; } 反向代理+负载均衡 web-1.1 #部署LNMP环境 #配置 vim /usr/local/nginx/conf/nginx.conf --snip-- http { --snip-- #定义服务器池,名称为web_servers。 upstream web_servers { server 192.168.1.2:80 weight = 1 ; server 192.168.1.3:80 weight = 1 ; } --snip-- location / { root html ; index index.html index.php index.htm ; #代理到服务器池web_servers proxy_pass http://web_servers ; } } service nginx restart web-1.2 #部署LAMP环境

nginx 启动,停止和重新加载配置

◇◆丶佛笑我妖孽 提交于 2020-02-29 11:14:36
nginx 启动,停止和重新加载配置 要启动nginx的,运行可执行文件。一旦nginx的启动时,它可以通过与-s参数调用可执行来控制。使用以下语法 nginx -s signal 其中,信号可以是下列之一: stop — fast shutdown quit — graceful shutdown reload — reloading the configuration file reopen — reopening the log files 在配置文件中所作的更改不会被应用,直到命令重新配置被发送到nginx的或重新启动。要重新加载配置,执行: nginx -s reload 一旦主处理接收到的信号重新加载配置,它检查新的配置文件的语法正确性并尝试应用在其提供的配置。如果这是一次成功,主进程开始新的工作流程,将消息发送到老的工作进程,要求它们关闭。否则,主进程回滚的变化,继续与旧的配置工作。旧的工作进程,在接收到命令关闭,停止接受新的连接,并继续服务于当前请求,直到所有的要求提供服务。在这之后,老工人处理退出。信号也可发送到nginx的与Unix工具的帮助下过程,如杀工具。在这种情况下,一个信号被直接发送到一个进程与给定的进程ID。nginx的主进程的进程ID写入,默认情况下,该nginx.pid在目录/ usr /本地/ nginx的/日志或/ var /运行。例如

python语法基础-并发编程-线程-线程池

核能气质少年 提交于 2020-02-29 08:55:32
############### 线程池 ############## """ 池 —— concurrent.futures Python标准模块--concurrent.futures concurrent.futures模块提供了高度封装的异步调用接口,其中: ThreadPoolExecutor:线程池 ProcessPoolExecutor: 进程池 借助上面两个类,我们可以很方便地创建进程池对象和线程池对象。 p_pool = ProcessPoolExecutor(max_workers=5) # 创建一个最多5个woker的进程池 t_pool = ThreadPoolExecutor(max_workers=5) # 创建一个最多5个woker的线程池 可用方法介绍: # 基本方法 # submit(fn, *args, **kwargs) 提交任务 # map(func, *iterables, timeout=None, chunksize=1) 取代for循环submit的操作 # shutdown(wait=True) 相当于进程池的pool.close()+pool.join()操作 wait=True,等待池内所有任务执行完毕回收完资源后才继续 wait=False,立即返回,并不会等待池内的任务执行完毕 但不管wait参数为何值

Shutdown or Restart Machine In C# and ASP.NET

倖福魔咒の 提交于 2020-02-29 04:27:57
问题 I want to be able to shutdown down or restart the server that my ASP.NET app is running on. The following code works great in debug mode: Process process = new Process(); ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "shutdown"; startInfo.Arguments = "/r /f /t 0"; startInfo.UseShellExecute = true; startInfo.Verb = "runas"; process.StartInfo = startInfo; process.Start(); I have also tried this code, but I receive the following error "The Process object must have the

Shutdown or Restart Machine In C# and ASP.NET

爷,独闯天下 提交于 2020-02-29 04:26:09
问题 I want to be able to shutdown down or restart the server that my ASP.NET app is running on. The following code works great in debug mode: Process process = new Process(); ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "shutdown"; startInfo.Arguments = "/r /f /t 0"; startInfo.UseShellExecute = true; startInfo.Verb = "runas"; process.StartInfo = startInfo; process.Start(); I have also tried this code, but I receive the following error "The Process object must have the