httpd的pid文件只包含一个ID,即使它产生了许多ID

问题描述 投票:1回答:1

我想在CentOS盒子上运行多个httpd服务,这样如果我正在开发一个mod_perl脚本并需要重新启动其中一个,其他的可以独立运行。 我在Windows上进行了此设置并正在迁移。

当然,这意味着单独的PID文件。 我在httpd.conf中使用PidFile指令配置我的,并将init.d脚本指向同一个地方。 它创建文件没关系,但不会用所有PID填充它:

$ sudo killall httpd ; sudo service httpd-dev restart
Stopping httpd: cat: /var/run/httpd/httpd-dev.pid: No such file or directory
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

Starting httpd:                                            [  OK  ]
$ sudo cat /var/run/httpd/httpd-dev.pid
18279
$ ps -A | grep httpd
18279 ?        00:00:00 httpd
18282 ?        00:00:00 httpd
18283 ?        00:00:00 httpd
18284 ?        00:00:00 httpd
18285 ?        00:00:00 httpd
18286 ?        00:00:00 httpd
18287 ?        00:00:00 httpd
18288 ?        00:00:00 httpd
18289 ?        00:00:00 httpd

......为什么会这样? 稍后当有其他httpd时,很难杀死我的dev httpd procs。 不能永远使用'killall'......

$ httpd -v
Server version: Apache/2.2.24 (Unix)

我应该注意CentOS 6.4 minimal没有安装killproc ,所以我改变了我的init.d来使用

kill -9 `cat ${pidfile}`

代替。 我猜killproc会搜索出子PID吗? 所以我必须安装python来安装killproc只是为了使用httpd的init脚本?

linux apache pid httpd.conf init.d
1个回答
3
投票

这里有两件事:

  • 您的单个Apache实例可能有多个与之关联的PID,具体取决于所选MPM的类型。 但是,这不应该影响您,因为您只需要终止写入PID文件的PID,并且该进程将终止所有其余的Apache实例。

  • 如果您尝试并排运行多个Apache实例,则必须指定一个不同的PID文件,每个文件一个。 然后,您可以决定要杀死的实例 - 您必须处理所选的每个实例的PID文件。 将相同的PID文件提供给多个实例,并期望它们各自将自己的PID放入同一个文件中,这样做无效。

© www.soinside.com 2019 - 2024. All rights reserved.