WGCLOUD可以监测我们主机服务器上运行的各种业务进程,系统进程当我们的进程异常退出或停止后,WGCLODU监控平台会发出通知告警,如下图片 那么我们如何在进程退出后,怎么启动进程呢?...以下三种方式均为WGCLOUD提供的功能1、如果是Linux监控主机,我们可以使用web ssh,连接到我们的主机,启动已下线的进程图片2、也可以通过【下发指令】模块来启动进程,这个可以选中多个主机,批量执行下发的指令图片...3、可以通过【自定义监控项】来实现,具体说明如下链接我们可以写一个shell脚本,具体逻辑为当发现进程退出时候,启动进程即可自定义监控项,WGCLOUD监控平台的agent会定期执行shell指令自定义监控项使用说明
问题背景 通过Jenkins来启动进程是一个实际工作中比较常见的场景。 但是正常情况下,通过Jenkins Job启动的进程,在构建结束后,都会被Jenkins杀死。...这是由Jenkins的进程树管理机制决定的。...我们可以通过修改变量值的方式来解决这个问题,但是这个方式有一些缺点: 不直观,解决了也看不出来是怎么解决的; 很难想到通过这种方式可以解决这个问题; 可读性差实际上是编码过程中应该尽可能避免的问题。...使用也很简单,如启动tomcat,这样操作就行: keepRunning { sh '/usr/local/apache-tomact/bin/startup.sh } 项目信息 开源项目主页...致力于DevOps理念的推广普及和落地。
Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。...除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动。...; 可以打开的进程数的最小值,默认 200 ; the below section must remain in the config file for RPC ; (supervisorctl/web...这些配置可以都写到 supervisord.conf 文件里,如果应用程序很多,最好通过 include 的方式把不同的程序(组)写到不同的配置文件里。...启动 5 秒后没有异常退出,就当作已经正常启动了 autorestart = true ; 程序异常退出后自动重启 startretries = 3 ; 启动失败自动重试次数,默认是 3
一、简介 Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程...除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动。...autostart = true ; 在 supervisord 启动的时候也自动启动 startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了 autorestart...= true ; 程序异常退出后自动重启 startretries = 3 ; 启动失败自动重试次数,默认是 3 user = leon ; 用哪个用户启动 redirect_stderr...5 秒后没有异常退出,就当作已经正常启动了 autorestart = true ; 程序异常退出后自动重启 startretries = 3 ; 启动失败自动重试次数,默认是 3
通信的一方已将Socket关闭,可能是主动关闭或是因为异常退出,这时如果通信的另一方还在写数据,就会触发这个异常(Connect reset by peer) 若对方还在尝试从TCP连接中读数据,则会抛出...为了避免这些异常发生,在编写网络通信程序时要确保: 程序退出前要主动关闭所有的网络连接 检测通信的另一方的关闭连接操作,当发现另一方关闭连接后自己也要关闭该连接。...发生这个异常的场景是,通信的一方在收到“Connect reset by peer: Socket write error”后,如果再继续写数据则会抛出Broken pipe异常,解决方法同上。...可通过 lsof -p pid 查看进程打开了哪些文件,是否有资源泄露,即进程打开的这些文件本应该被关闭,但由于程序的Bug而没有被关闭。...断开连接时四次挥手的最后一个阶段,客户端要等待2MSL,保证服务端收到客户端ack(如果服务端没有收到最后一次挥手ack会重试,这时客户端需重新发送ack),所以在这个时间段内不会释放端口,若并发量过大会导致大量
它从父进程处继承了整个进程的地址空间;包括进程上下文(进程执行活动全过程的静态描述)、进程堆栈、打开的文件描述符、信号控制设定、进程优先级、进程组号等。...如果父进程先退出,子进程还没退出,子进程的父进程就变成了Init进程(任何一个进程都必须有父进程) 僵尸进程:如果子进程先退出,父进程还没退出,那么子进程必须等到父进程捕获到了子进程的退出状态才真正结束...模式,启动普通应用程序。...fork成功后,会关闭closeServerSocket服务,因为SystemServer进程不需要socket 接着会逐步调用到SystemServer的main函数 SystemServer的main...心里种花,人生才不会荒芜,如果你也想一起成长,请点个关注吧。 作者介绍 中年程序猿,十年移动端开发老司机,分享一线开发经验和知识,正在探索通过副业渡过中年危机 越努力越幸运,加油,一起遇见更好的自己
什么是优雅关闭 一种情况是在多进程并发时,假设客户端有两个进程,父进程和子进程,子进程是在父进程和服务器建立连接之后fork出来的,我们期望实现这样的功能: 子进程将数据写入套接字后close,并退出,...服务端接收完数据,直到检测到EOF,也关闭连接,并退出,接着父进程读取完服务端响应的数据,也退出,但如果子进程使用close的话,并不会发生4次挥手的过程,只是引用计数减1,服务端是接收不到EOF的,这时就需要使用优雅关闭了...,那么这个套接字仍然是打开的,可以读写,并不会发生四次挥手; shutdown则会根据how选项切断进程共享的套接字的该功能,比如所有试图读的进程都会接收到EOF标识,所有试图写的进程将会检测到SIGPIPE...信号; 注意:showdown后仍然要调用close关闭socket 2.2 使用so_linger 2.2.1 代码例子 struct linger ling; ling.l_onoff = 1...close如果成功返回,则说明对方已对发送的数据进行了确认,但却并不知道应用程序是否已读取了数据。并且如果套接口是非阻塞的,它将不等待close完成。
,如果服务端应用程序没有数据要发送的话,可以直接调用关闭连接的函数,这时服务端就会发一个 FIN 包,这个 FIN 报文代表服务端不会再发送数据了,之后处于 LAST_ACK 状态; 客户端接收到服务端的...,就发完数据后,才调用关闭连接的函数; 如果服务端应用程序没有数据要发送的话,可以直接调用关闭连接的函数, 从上面过程可知,是否要发送第三次挥手的控制权不在内核,而是在被动关闭方(上图的服务端)的应用程序...FIN 报文一定得调用关闭连接的函数,才会发送吗? 不一定。 如果进程退出了,不管是不是正常退出,还是异常退出(如进程崩溃),内核都会发送 FIN 报文,与对方完成四次挥手。...如果有多进程/多线程共享同一个 socket,如果有一个进程调用了 close 关闭只是让 socket 引用计数 -1,并不会导致 socket 不可用,同时也不会发出 FIN 报文,其他进程还是可以正常读写该...如果是写操作,那么程序会产生 SIGPIPE 信号,应用层代码可以捕获并处理信号,如果不处理,则默认情况下进程会终止,异常退出。
supervisor 的介绍 Supervisor是用Python开发的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。...能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。...除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动。...如果为false则不自动重启,如果为unexpected表示如果程序退出信号不在 `exitcodes` 中,则自动重启。...reread # 将配置文件里新增的子进程加入进程组,如果设置了autostart=true则会启动新新增的子进程 supervisorctl update web管理 # 1 修改配置文件 vim
非daemon模式 以非daemon模式启动的nginx进程并不会立刻退出。其实在终端执行非bash内置命令,终端进程会fork一个子进程,然后exec执行我们的nginx bin。...为1) 2、如果子进程不是游离进程(detached为0),通过socket channel通知其他的worker进程NGX_CMD_CLOSE_CHANNEL指令,管道需要关闭(我要死了,以后不用给我打电话了...live && (ngx_terminate || ngx_quit)条件满足时,master进程就会做相应的进程退出工作(删除pid文件,调用每一个模块的exit_master函数,关闭监听的socket...当主循环检测到ngx_reopen为1时,会调用ngx_reopen_files函数重新打开文件,生成新的fd,然后关闭旧的fd。...,基于信号的事件循环架构,基于各种标记位的相应进程的管理,包括进程退出,配置文件变更,重新打开文件,升级binary以及master和worker通信的一种方式之一:socket channel。
简介: Supervisor (http://supervisord.org) 是一个用 [Python] 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。...除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动。...,默认是 false,即以 daemon 的方式启动 minfds=1024 ; 可以打开的文件描述符的最小值,默认 1024 minprocs=200...; 可以打开的进程数的最小值,默认 200 ; the below section must remain in the config file for RPC ; (supervisorctl/web...startsecs = 1 ; 启动 1 秒后没有异常退出,就当作已经正常启动了 autorestart = true ; 程序异常退出后自动重启 startretries = 3
这项设置决定了是否关闭所有运行中的窗体并退出应用程序。默认情况下,关闭主窗体(通常是启动应用程序时首先打开的窗体)时,应用程序会退出。...在打开的项目属性页面中,点击“应用程序”选项卡。你将看到一个名为“关闭模式”的下拉菜单。其中有几个选项:“当启动窗体关闭时退出”:这意味着当你的启动窗体关闭时,应用程序将完全退出。...“当最后一个窗体关闭时退出”:这意味着应用程序将继续运行直到最后一个打开的窗体被关闭。选择“当启动窗体关闭时退出”选项。点击“确定”保存更改。...设置完成后,每次当你的启动窗体被关闭时,应用程序将自动退出,不会留在背后运行任何进程。请确保你理解这两个选项的区别,选择对你的应用程序最合适的一个。...如果你的应用程序中只有一个主窗体,那么这个设置可能不会对行为产生太大影响。但如果你有多个窗体或者你的应用程序在后台运行任务,选择正确的“关闭模式”将非常重要。
supervisor 管理进程 说明 Supervisor是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程....manage:app ; 启动命令 autostart = true ; 在 supervisord 启动的时候也自动启动 startsecs = 5 ; 启动 5 秒后没有异常退出...,就当作已经正常启动了 autorestart = true ; 程序异常退出后自动重启 startretries = 3 ; 启动失败自动重试次数,默认是 3 user = www...appname 是应用程序的唯一标识,不能重复。...几个注意点: 1.执行命令必须是绝对路径的命令 2.执行程序必须是前台运行,如果是后台运行的转为前台 3.如果涉及子进程添加以下参数,确保子进程都能停止 stopasgroup
它负责启动子进程,响应来自客户端的命令,重启崩溃或者已退出的子进程,记录子进程标准输出和错误输出,以及生成和处理与子进程生命周期中对应的事件。...supervisord 启动的时候此web应用也自动启动 startsecs = 5 ; 启动 5 秒后没有异常退出, 就当作已经正常启动了 autorestart = true ;...程序异常退出后自动重启 startretries = 3 ; 启动失败自动重试次数, 默认是 3 user = leon ; 用哪个用户启动 redirect_stderr =...$ supervisorctl reload ## 根据最新的配置文件, 启动新配置或有改动的进程, 配置没有改动的进程不会受影响而重启....run ; 程序启动命令 autostart=true ; 在supervisord启动的时候也自动启动 startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了
supervisorctl 说明 Supervisor是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程....manage:app ; 启动命令 autostart = true ; 在 supervisord 启动的时候也自动启动 startsecs = 5 ; 启动 5 秒后没有异常退出...,就当作已经正常启动了 autorestart = true ; 程序异常退出后自动重启 startretries = 3 ; 启动失败自动重试次数,默认是 3 user = www...appname 是应用程序的唯一标识,不能重复。...几个注意点: 1.执行命令必须是绝对路径的命令 2.执行程序必须是前台运行,如果是后台运行的转为前台 3.如果涉及子进程添加以下参数,确保子进程都能停止 stopasgroup=true
进程)异常退出,也是通过socket 主要目的:回收僵尸进程 在Linux内核中,如父进程不等待子进程的结束直接退出,会导致子进程在结束后变成僵尸进程,占用系统资源 ...... sigchld_handler_init...回收僵尸进程,在Linux内核中,如父进程不等待子进程的结束直接退出,会导致子进程在结束后变成僵尸进程,占用系统资源。...fork出system_server子进程 4)zygoteServer.runSelectLoop()在zygote进程中无限循环,使得zygote不会退出,等待 AMS 请求创建新的应用程序进程...android应用进程会关闭socket,zygote仍然在runSelectLoop中轮询监听socket zygoteServer.closeServerSocket();...用于描述应用程序,ActivityRecord用于描述Activity的信息 4.检查activity的进程启动起来没,如果没有AMS请求zygote fork出进程 ActivityStackSupervisor.java
-s reopen命令 更改配置文件 发送HUP信号给master进程。 master检查新的配置文件语法是否合理。 如果合理,根据新的配置文件打开新的socket连接监听。...会创建新的worker进程,然后通知老的worker进程优雅的关闭。老进程收到消息后完成当前客户端的请求,然后自动关闭。 如果不合理,回滚,使用原先的配置文件继续运行。...然后就剩新的master和worker进程,以及老的master进程。 注意:老的master进程不会退出。可以用于必要时候的回滚操作。有两种情况。...给老的master进程发送HUP信号,它会以不读取nginx.conf的方式启动新的worker进程。然后再给新的master进程发送QUIT信号让他优雅的退出。...新的master退出之后,老的master进程会自动启动新的worker进程。 如果回滚,那么第四步的nginx.pid.oldbin文件会被丢弃。
;可以打开的进程数的最小值,默认 200 [supervisorctl] serverurl=unix:///tmp/supervisor.sock ;通过UNIX socket连接supervisord...autostart=true ; 在supervisord启动的时候也自动启动 startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart...当程序exit的时候,这个program不会自动重启,默认unexpected,设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。...如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的 autorestart=false # 这个选项是子进程启动多少秒之后...startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了 autorestart = true ; 程序异常退出后自动重启 startretries = 3
Processes and Threads 进程 操作系统会为该应用程序创建一个进程。作为一个应用程序,它像一个为所有资源而运行的容器。...我们要确保应用的必要goroutine退出时,停止应用程序。 serveApp退出会导致应用退出,进而由进程管理者来决定是否重启。...Fork 子进程 在Go语言中 exec 包为我们很好的封装好了 Fork 调用,并且使用 ExtraFiles 可以很好的继承父进程已打开的文件。...平滑重启流程 监听 SIGHUP 信号; 收到信号时 fork 子进程(使用相同的启动命令),将服务监听的 socket 文件描述符传递给子进程; 子进程监听父进程的 socket,这个时候父进程和子进程都可以接收请求...; 子进程启动成功之后发送 SIGTERM 信号给父进程,父进程停止接收新的连接(调用http的shutdown),等待旧连接处理完成(或超时); 父进程退出,升级完成; goroutine 泄露 func
领取专属 10元无门槛券
手把手带您无忧上云