apache停止和重启

apache停上或重启的有两种,第一种发送信号到进程,第二种是使用apachectl脚本执行stop,start,graceful或graceful-stop命令

信号方式:

1.TERM
kill -TERM  `cat /usr/local/apache2/logs/httpd.pid` #类似 apachectl -k stop
原理过程: 当发送 TERM或stop信号时,父进程会试图立即杀死子进程,但杀死子进程可能需要几秒钟,过程中父进程退出,所有已经在处理的请求都会终止,并且不在接受其他请求

2.USR1
kill -USR1 `cat /usr/local/apache2/logs/httpd.pid` #类似 apachectl -k granceful
原理过程:当发送USR1或者graceful信号时,子进程会先处理已经接受的请求,然后再退出(如果子进程没有提供服务则立即退出),父进程不会退出,它会重新加载配置文件和重新打开日志文件,每一个子进程死后,父进程会用生成新的子进程然后重新处理请求

3.HUP
kill -HUP `cat /usr/local/apache2/logs/httpd.pid` #类似 apachectl -k restart

原理过程:当发送HUP或者restart信号时,父进程会像发送TERM信号一样杀死子进程,但是父进程不会退出,它会重新打开配置文件和重新打开日志文件,然后产生一组新的子进程来提供服务

4.WINCH
kill -WINCH `cat /usr/local/apache2/logs/httpd.pid` #类似apachectl -k granceful-stop

原理过程:当发送WINCH或者graceful-stop信号时,父进程会建议子进程待处理请求完后再退出(如果子进程没有在提供服务 则立即退出),之后父进程将会移除原来创建的的pidfile文件停止所有正在监听的端口,此过程父进程继续运行,并且监听正在处理的请求的子进程,一旦子进程处理完成或者超过了这个GracefulShutdownTimeout指定的处理时间,父进程也退出。如果超过了GracefulShutdownTimeout这个时间,将发送一个TERM信号,迫使正在处理请求的子进程退出。

在这个过程中父进程移除了pidfile文件,将无法使用apachectl或httpd发送此信号。

granceful-stop允许同时运行多个相同配置的httpd实例,在对httpd进行优雅的升级时,这是一个强大的特性,但是它也会导致一些配置的死锁和竞争资源

为了确保磁盘上包含了pid的文件(如锁文件)或Unix套接字文件(ScriptSock)不受影响,它们应该在没有问题的情况下共存,实则系统已经采取了谨慎的措施。但是如果配置了指令、第三方模块或持久的CGI,并且使用磁盘锁或状态文件,那么应该注意确保多个httpd实例不会阻塞彼此的文件。





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值